使用角色更改QAbstractTableModel headerData
Changing QAbstractTableModel headerData using the role
我有一个子类
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
对象ViewA
和viewB
。我需要ViewA
有一个标题与role == Qt::DisplayRole
和viewB
有role == TableModel::CurrencyRole
的标题。如何使用角色来更改每个视图的headerData。
谢谢,如果我遗漏了什么细节,或者我的问题中有什么不清楚的地方,请告诉我。
首先,看起来要做你想做的事情有点棘手。
快速阅读Qt源代码后,它看起来没有办法改变什么角色传递给你的模型的headerData()
函数只是使用API。
paintSection()
函数,然后做任何您想做的事情。您可能需要查看Qt对该函数的实现,以参考如何正确实现它。
此时,您可以将视图的标题视图设置为新的自定义视图,然后从视图设置一些内部标志,告诉它如何正确地调用headerData()
与您想要的角色。
相关文章:
- 没有找到相关文章