首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用角色更改QAbstractTableModel headerData

使用角色更改QAbstractTableModel headerData
EN

Stack Overflow用户
提问于 2011-10-13 23:48:49
回答 1查看 3.2K关注 0票数 1

我有一个子类

代码语言:javascript
复制
class TableModel : public QAbstractTableModel

我覆盖headerData方法,如下所示:

代码语言:javascript
复制
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();
}

我有一个使用TableModel* table设置QTableView的方法,如下所示

代码语言:javascript
复制
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。

谢谢,如果我在问题中遗漏了任何细节,或者有什么不清楚的地方,请告诉我。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-10-14 00:11:59

首先,看起来做你想要做的事情会有点棘手。

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

但是,您确实能够子类化QHeaderView并覆盖虚拟paintSection()函数,然后做任何您想做的事情。您可能需要查看此函数的Qt's implementation,以便参考如何正确实现它。

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

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7756834

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档