Cla*_*diu 6 c++ qt qt4 qabstractitemmodel qsortfilterproxymodel
我有一个自定义子类QSortFilterProxyModel。我filterAcceptsRow用我想要的自定义过滤器覆盖了。然后我这样使用它:
proxy = new MyFilterModel();
proxy->setSourceModel(...);
proxy->setDynamicSortFilter(true);
proxy->setFilterParams(...); // my custom function
comboBox->setModel(proxy);
Run Code Online (Sandbox Code Playgroud)
但是,当基础源模型更新以使之前筛选的行不再被筛选时,组合框不会使用这些行进行更新。这是为什么?
最终我像这样重写setSourceModel了MyFilterModel:
void MyFilterModel::setSourceModel(QAbstractItemModel *sourceModel)
{
QSortFilterProxyModel::setSourceModel(sourceModel);
connect(sourceModel, SIGNAL(dataChanged(const QModelIndex&, const QModelIndex&)), this, SLOT(doInvalidateFilter()));
connect(sourceModel, SIGNAL(modelReset()), this, SLOT(doInvalidateFilter()));
invalidateFilter();
}
Run Code Online (Sandbox Code Playgroud)
... 所做的一切doInvalidateFilter()就是调用invalidateFilter。这很有效——现在当模型更新时,过滤器行本身也会更新。
不过,我认为setDynamicSortFilter应该已经解决了这个问题。这是 Qt 中的错误吗?
小智 0
我遇到了类似的问题,代理工作正常。我的模型看起来像这样:
class MyModel:public QAbstractListModel{
...
bool setData(...) Q_DECL_OVERRIDE;
MyItem* get(int index);
private:
QList<MyItem*> m_model;
}
Run Code Online (Sandbox Code Playgroud)
我以为我正在通过模型更改 MyItem(在 QML 中)(通过调用“setData(...)”间接地),但是在我碰到你的帖子后,我再次检查了 QML 文件,结果发生了我改变的不是模型而是物品本身。
模型不知道代理和视图的变化。
我已更新 MyItem 以在父模型发生更改时向其发出信号,因此该模型可以发出 DataChanged(...) 并通知其他人。
也许你的代码中有类似的东西?
| 归档时间: |
|
| 查看次数: |
7944 次 |
| 最近记录: |