qt - 为视图创建多个 QSortFilterProxyModel 实例
问题描述
我listviews
在一个Page
组件上有两个。两者的模型都来自一个QSortFilterProxyModel
. 问题是如果我为一个设置数据,ListView
另一个也会改变。发生这种情况是因为模型只有一个实例。
我是否必须创建 2 个不同的实例,QSortFilterProxyModel
还是有其他方法?
我的代码
主文件
int main(int argc, char *argv[])
{
// Application basic initialization
QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
QGuiApplication app(argc, argv);
QQmlApplicationEngine engine;
QtWebEngine::initialize();
QQuickStyle::setStyle("Default");
FilterModel filterModel;
FilterList filterList;
// Set contexts for QML
engine.rootContext()->setContextProperty("filterModel",&filterModel);
engine.rootContext()->setContextProperty("filterList",&filterList);
engine.load(QUrl(QStringLiteral("qrc:/main.qml")));
if (engine.rootObjects().isEmpty())
return -1;
return app.exec();
}
过滤器列表.cpp
#include "filterlist.h"
FilterList::FilterList(QObject *parent) : QSortFilterProxyModel(parent)
{
setSourceModel(&m_filterListModel);
}
void FilterList::searchByCategory(QString filterSubCategory)
{
setFilterRole(m_filterListModel.FilterListCategoryRole);
this->setFilterCaseSensitivity(Qt::CaseInsensitive);
this->setFilterFixedString(filterSubCategory);
}
我的页面.qml
import QtQuick 2.15
import QtQuick.Controls 2.15
import QtQuick.Layouts 1.3
Page {
id : somepageid
Column{
Button{
id: btn1
text: "btn a"
onClicked: {
filterList.searchByCategory("category a")
}
}
Button{
id: btn2
text: "btn b"
onClicked: {
filterList.searchByCategory("category b")
}
}
}
ListView{
id: lv1
model: filterList
height: 100
delegate: Row{
Text{
text: name
}
}
}
ListView{
id: lv2
anchors.top: lv1.bottom
model: filterList
height: 100
delegate: Row{
Text{
text: name
}
}
}
}
解决方案
我是否必须创建 QSortFilterProxyModel 的 2 个不同实例,还是有其他方法?
即使您创建了 2 个代理模型实例,如果为两者设置相同的源,您也会遇到同样的问题。当您调用QSortFilterProxyModel::setSource
时,它将代理模型连接到源模型,您更改的所有内容都将传播到源模型。因此,如果您更改第一个代理模型中的某些内容,它将传播到源模型并从源模型传播到第二个代理模型。
通过 QSortFilterProxyModel 所做的任何更改都将应用于原始模型。
因此,为了有 2 个最初具有相同模型的独立列表,您必须创建 2 个源模型实例和 2 个代理模型实例。
推荐阅读
- python - ValueError:无法将大小为 200 的数组重塑为形状 (200,320,240,1)
- python - 需要帮助修复错误“TypeError:'NoneType' 对象不可下标”
- python - 当我输入“python3.6 get-pip.py”时,无法修复“zipimport.ZipImportError:无法解压缩数据;zlib 不可用”
- excel - 如何根据唯一 ID 重建数据集
- python - NumPy:理解颜色矩阵中的值
- vue.js - 检测用户是否在 4x4 div 网格中创建了 4x4 行
- javascript - 如何防止 React-Leaflet Map 的子级事件冒泡
- java - Selenium:为三种环境运行具有不同 URL 的 Java 代码
- angular - 如果使用了 defaultHref,如何获得有条件的离子后退按钮文本?
- arangodb - ArangoDB 图遍历查询如何在集群中执行?