【发布时间】:2019-04-02 15:02:25
【问题描述】:
我正在尝试将 QSortFilterProxyModel 与 QStandardItemmodel 一起使用,但 filterAcceptedRows() 没有更新视图。
这些行在函数 filterAcceptedRows() 中被正确过滤,但视图没有更新。它仍在显示所有行。您可以在下面找到我已经尝试过的代码,有人可以告诉我我在这里遗漏了什么
这是 QDialog 中的代码。
m_modelApp = new QStandardItemModel();
m_proxyApp = new ProxyModelApp();
m_proxyApp->setSourceModel(m_modelApp);
m_lstApp->setModel(m_modelApp);
这就是我向模型添加数据的方式。
QStandardItem *item1 = new QStandardItem();
QStandardItem *item2 = new QStandardItem();
QStandardItem *item3 = new QStandardItem();
QStandardItem *item4 = new QStandardItem();
QStandardItem *item5 = new QStandardItem();
QStandardItem *itemCheck = new QStandardItem();
item1->setData(l_sRefProduitSW,Qt::DisplayRole);
item2->setData("To Define",Qt::DisplayRole);
item3->setData(app.GetRefApp(),Qt::DisplayRole);
item4->setData(app.GetRefIdentApp(),Qt::DisplayRole);
item5->setData(app.GetRefFNRApp(),Qt::DisplayRole);
itemCheck->setCheckable(true);
if(m_xRefBe->GetListeAppBE().contains(app))
itemCheck->setCheckState(Qt::Checked);
else
itemCheck->setCheckState(Qt::Unchecked);
listItems<<itemCheck<<item1<<item2<<item3<<item4<<item5;
m_modelApp->appendRow(listItems);
ProxyModelApp 中的过滤器之一。
void ProxyModelApp::setRefLibApp(QString refLibApp){
if(m_refLibApp != refLibApp)
m_refLibApp = refLibApp;
invalidateFilter();
}
我想知道,为什么filterAcceptedRows()函数过滤成功后视图没有更新。
谢谢。
【问题讨论】:
-
尝试调用你的代理
invalidateFilter() -
每当我尝试过滤它时,我都会调用 InvalidateFilter。我用这个函数更新代码。
-
m_listApp->setModel(m_proxyApp) -
谢谢。我明白了这个问题。
-
错字:把
m_lstApp->setModel(m_modelApp);改成m_lstApp->setModel(m_proxyApp);
标签: c++ qt qstandarditemmodel qsortfilterproxymodel