我有一个 QAbstractListModel
派生的 C++ 类,其中包含两种类型的事物的列表,例如像这样:
class MyList : public QAbstractListModel
{
Q_OBJECT
public:
MyList();
int rowCount(const QModelIndex& parent = QModelIndex()) const override
{
return mData.size();
}
QVariant data(const QModelIndex& index, int role = Qt::DisplayRole) const override
{
int i = index.row();
if (i < 0 || i >= mData.size())
return QVariant(QVariant::Invalid);
return QVariant::fromValue(mData[i]);
}
private:
QList<Something> mData;
};
假设数据有一个 bool 成员,这样在 QML 中我可以做这样的事情:
Repeater {
model: myList
Text {
text: model.display.someBoolean ? "yes" : "no"
}
}
我的问题很简单。如何使列表仅显示someBoolean
为true的项目? IE。如何过滤列表?
我知道QSortFilterProxyModel
,但文档仅提到C++。我是否必须创建一个 QAbstractItemModel*
作为 MyList
的 Q_PROPERTY
,然后为其设置 QML 模型?像这样吗?
Repeater {
model: myList.filteredModel
...
class MyList : public QAbstractListModel
{
Q_OBJECT
Q_PROPERTY(QAbstractItemModel* filteredModel READ filteredModel ... etc)
public:
有人有任何指导或示例吗?
注意:我见过this question 。尽管有标题,但它没有回答问题,而且似乎与 QML 无关。
最佳答案
您需要继承 QSortFilterProxyModel 并按照文档的建议在其中进行过滤。然后您需要将 QSortFilterProxyModel 对象分配给所需的 QML 对象。这就是 QML 对象接收过滤数据的方式。
关于qml - 在 QML 中过滤/排序 QAbstractListModel,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26717209/