2011-08-08 68 views
0

我有兩個tableView從繼承自QAbstractTableModel的同一個類繼承而來(TableModel)。我想爲2個表格添加標題,但這些標題對於每個表格應該是不同的。在我的TableModel中,我有這種方法:從同一個表中繼承的兩個表的不同標題ModelModel類

 

    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

繼承,如果兩個tableviews共享指針到相同的模型,那麼這將無法正常工作。 – user110

相關問題