删除QML模型(QAbstractListModel从C++)
最后的元素我有一个从C++(QAbstractListModel)QML模型和我使用的列表视图anfd GridView的表现出来(例如,我的模式“DM_valves”)删除QML模型(QAbstractListModel从C++)
我有一个模型有16个元素,但我只想显示较少的元素(例如,在启动时可以使用像“number_on_elements = 5”的变量)
我认为不可能限制ListView中元素的最大数量,所以我想尝试删除QML中QAbstractListModel的元素。
是可能的吗?如何?
你可以尝试这样简单的东西:
ListView {
id: view
model: mod
height: 50
width: 50
property int maxCount: 5
delegate: Rectangle {
height: visible ? 20 : 0
width: visible ? 20 : 0
visible: index < view.maxCount
Text {
anchors.centerIn: parent
text: index
}
}
}
诀窍是让不可见元素的大小为零,以便它们不会采取在视图中的任何空间。
如果您有成千上万的模型项目和复杂的代理,它将不会有效,因为所有委托都将在内存中创建,即使不可见。您可以使用加载程序并只加载可见列表项目的实际项目。
还要考虑你限制QAbstractListModel
实现计数,你可以有一个MAXCOUNT变量,并在
rowCount() { return maxCount ? std::min(maxCount, yourList.size()) : yourList.size(); }
这样,如果MAXCOUNT不为零,该模型可以报告比其实际尺寸更小。
太棒了!非常简单的解决方案。代表模型看起来也不错。我在C++中使用proxymodels,但我需要QML方面的解决方案 –
一种方法是添加一个过滤代理,它的'number_of_elements'属性暴露给QML。 –
您是否尝试过使用'DelegateModel' [link](http://doc.qt.io/qt-5/qml-qtqml-models-delegatemodel.html)?您可以创建一个名为'firstGroup'的组,并且该组中的条件将为'index user2436719