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

我有两个QTableView对象ViewAviewB. 我需要ViewA有一个标题role == Qt::DisplayRoleviewB一个标题role == TableModel::CurrencyRole。如何使用角色为每个视图更改 headerData。

谢谢,如果我遗漏了任何细节或我的问题不清楚,请告诉我。

4

1 回答 1

3

首先,看起来完全按照您的意愿去做会有点棘手。

在快速阅读 Qt 源代码之后,似乎无法headerData()仅使用 API 更改传递给模型函数的角色。

但是,您确实有能力继承 QHeaderView 并覆盖虚paintSection()函数,然后做任何您想做的事情。您可能需要查看Qt对此函数的实现,以了解如何正确实现它。

此时,您可以将视图上的标题视图设置为新的自定义视图,然后从视图中设置一些内部标志,告诉它如何正确调用headerData()所需的角色。

于 2011-10-13T16:11:59.160 回答