我有来自C ++的QML模型(QAbstractListModel),我使用Listviews和网格视图来显示它(例如,使用我的模型" DM_valves")
我有一个包含16个元素的模型,但我只想显示更少的元素(例如,在启动时我可以使用" number_on_elements = 5等变量)
我认为不可能限制ListView中元素的最大数量,所以我想尝试将元素删除到QML端的QAbstractListModel。
可能吗?怎么样?
答案 0 :(得分:0)
您可以尝试这样简单的事情:
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不为零,模型可以报告小于其实际大小。