1

私はサブクラスを持っています

class TableModel : public QAbstractTableModel

headerData次のようにメソッドをオーバーライドします。

QVariant TableModel::headerData(int section, Qt::Orientation orientation, int role) const
{
   if (role == Qt::DisplayRole && orientation == Qt::Horizontal) {...}
   if (role == TableModel::CurrencyRole && orientation == Qt::Horizontal) {...}
   return QVariant();
}

次のように設定する方法がありQTableViewますTableModel* table

void A::SetDisplay(QTableView* table_view, QString filter, int role, int sort_role)
{
  proxyModel = new QSortFilterProxyModel(this);
  proxyModel->setSourceModel(table);
  proxyModel->setDynamicSortFilter(true);
  proxyModel->setSortRole(sort_role);
  table_view->setModel(proxyModel);
  table_view->setSortingEnabled(true);
  table_view->setSelectionBehavior(QAbstractItemView::SelectRows);
  table_view->horizontalHeader()->setStretchLastSection(true);
  table_view->verticalHeader()->hide();
  table_view->setEditTriggers(QAbstractItemView::NoEditTriggers);
  table_view->setSelectionMode(QAbstractItemView::SingleSelection);
  proxyModel->setFilterRegExp(QRegExp(filter, Qt::CaseInsensitive));
  proxyModel->setFilterKeyColumn(1);
  proxyModel->sort(0, Qt::AscendingOrder);
  connect( table_view->selectionModel(),
    SIGNAL(selectionChanged(QItemSelection,QItemSelection)),
    this, SIGNAL(selectionChanged(QItemSelection)));
}

と の 2 つのQTableViewオブジェクトがViewAありviewBます。のヘッダーが必要で、ViewAのヘッダーが必要です。ロールを使用してビューごとに headerData を変更するにはどうすればよいですか。role == Qt::DisplayRoleviewBrole == TableModel::CurrencyRole

ありがとうございます。詳細を省略したり、質問で不明な点がありましたらお知らせください。

4

1 に答える 1

3

まず第一に、あなたがやろうとしていることを正確に行うことは少しトリッキーになるでしょう。

Qtソースコードをざっと読んだ後、headerData()APIを使用するだけでモデルの関数に渡される役割を変更する方法はないようです。

ただし、QHeaderViewをサブクラス化し、仮想paintSection()関数をオーバーライドしてから、必要な操作を実行することができます。Qtのこの関数の実装を調べて、適切に実装する方法を参照する必要があります。

この時点で、ビューのヘッダービューを新しいカスタムビューに設定し、ビューから内部フラグを設定headerData()して、必要な役割で適切に呼び出す方法を指示できます。

于 2011-10-13T16:11:59.160 に答える