2011-08-08 5 views
0

QAbstractTableModel에서 상속받은 동일한 클래스 (TableModel)에서 상속 한 2 개의 tableView가 있습니다. 내가 2 테이블에 대한 헤더를 추가하고 싶습니다하지만 이러한 헤더는 각 테이블에 대해 서로 다른해야합니다. 내 테이블 모델에서 나는이 방법을 가지고있다 :같은 tableModel 클래스에서 상속 한 두 테이블의 다른 헤더

 

    QVariant TableModel::headerData(int section, Qt::Orientation orientation, int role) const 
    { 
     if (role != Qt::DisplayRole) 
      return QVariant(); 

     if (orientation == Qt::Horizontal) { 
      switch (section) { 
      case 0: 
       return tr("Header1"); 

      case 1: 
       return tr("Header2"); 

      case 2: 
       return tr("Header3"); 

      default: 
       return QVariant(); 
      } 
     } 
     return QVariant(); 
    } 

그러나 이것은 테이블 중 하나에서만 작동 할 것이다. 어떻게 다른 테이블에 다른 헤더를 설정할 수 있습니까?

+0

당신은 테이블 모델에서 상속 테이블 뷰를 가지고 있습니까? –

+0

예 ... 두 테이블 뷰가 동일한 모델에 대한 포인터를 공유하는 경우 테이블 모델 – schmimona

답변

1

한 가지 간단한 방법은 하나 또는 다른 테이블보기에 대한 프록시 모델을 만들고 프록시 모델을 통해 헤더 정보를 무시하는 것입니다. 이 응용 프로그램의 경우 매우 어렵지 않습니다.

그런데, 나는 다른 테이블에서 같은 데이터에 대해 다른 의미를 갖는 열을 발생시키는 상황에 대해 궁금합니다.

0

또 다른 간단한 방법은 모델에 property을 만들어 헤더 값을 설정할 수있게하는 것입니다. 예를 들면 :

public class TableModel { 
    Q_PROPERTY(QString header1 header1 setHeader1); 
    QString _header1; 
    // ... 
public: 
    QString header1() { return _header1; } 
    void setHeader1(const QString& header) { _header1 = header; } 
    // ... 
}; 

을 그리고 당신은 당신의 데이터 기능에 header1() 반환 할 수 있습니다

QVariant TableModel::headerData(int section, Qt::Orientation orientation, int role) const 
{ 
    if (role != Qt::DisplayRole) 
     return QVariant(); 

    if (orientation == Qt::Horizontal) { 
     switch (section) { 
     case 0: 
      return header1(); 

     case 1: 
      return header2(); 

     case 2: 
      return header3(); 

     default: 
      return QVariant(); 
     } 
    } 
    return QVariant(); 
} 
+0

에서 상속 한 2 개의 테이블 뷰가 있는데이 경우 작동하지 않습니다. – user110

관련 문제