c++ - 使用角色更改 QAbstractTableModel headerData

标签 c++ model-view-controller qt qabstracttablemodel

我有一个子类

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

我有一个使用 TableModel* table 设置 QTableView 的方法

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::DisplayRole 的标题和 viewB 有一个带有 role == TableModel 的标题::货币角色。如何使用该角色让 headerData 为每个 View 更改。

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

最佳答案

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

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

但是,您确实可以子类化 QHeaderView 并覆盖虚拟 paintSection() 函数,然后执行任何您想做的事情。您可能需要查看 Qt's implementation了解此功能以供引用如何正确实现。

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

关于c++ - 使用角色更改 QAbstractTableModel headerData,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7756834/

相关文章:

c++ - 用 C++ 快速读取文本文件

c++ - 根据模板类型选择类模板的成员类型?

C++ : What is happening when a non-overridden calls a overridden method?

mysql - 为什么插入查询在 Laravel 5 中不起作用

c++ - Qt 5 让 QQuickItem 在不使用 QPainter 的情况下绘制椭圆

qt - 在 QTableWidget 中禁用键盘搜索

c++ - OpenMP:如何在 PARALLEL block 中正确嵌套 MASTER 和 FOR?

java - Spring MVC 和 JUnit : Failed to load ApplicationContext

c++ - ORA-00904 : "E_MAIL": invalid identifier

c++ - 如何将 Qt 代码分解成单独的部分?