2011-08-08 8 views
0

QAbstractTableModelから継承する同じクラス(TableModel)を継承する2つのtableViewがあります。私は2つのテーブルのヘッダーを追加したいと思いますが、これらのヘッダーは各テーブルごとに異なるはずです。私のTableModelでは、私はこのメソッドを持っています:同じtableModelクラスを継承する2つのテーブルの異なるヘッダ

 

    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(); 
    } 

しかし、これはテーブルの1つでのみ動作します。他のテーブルのヘッダーを変更するにはどうすればよいですか?

+0

あなたはテーブルモデルから継承し、テーブルビューを持っていますか? –

+0

はい... 2つのテーブルビューが同じモデルへのポインタを共有する場合、テーブルモデル – schmimona

答えて

1

単純な方法の1つは、一方または他方のテーブルビューに対してプロキシモデルを作成し、プロキシモデルを介してヘッダ情報を上書きすることです。このアプリケーションでは、それほど難しいことではありません。

私は、列につながる状況が、同じデータで何か異なることを意味しているのだろうかというと、別のテーブルにあるだけです。

0

もう1つの簡単な方法は、モデルに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

関連する問題