У меня два listviews
на одном компоненте Page
. Модель для обоих идет от единственного QSortFilterProxyModel
. Проблема в том, что если я установил данные для одного ListView
, другой тоже изменится. Это происходит, поскольку существует единственный экземпляр модели.
Придется ли мне создать 2 разных экземпляра QSortFilterProxyModel
или есть другой способ?
Мой код
основной. cpp
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);
}
mypage.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
}
}
}
}