从QML模型中删除最后的元素(来自C ++的QAbstractListModel)

时间:2016-10-04 16:44:54

标签: qt qml

我有来自C ++的QML模型(QAbstractListModel),我使用Listviews和网格视图来显示它(例如,使用我的模型" DM_valves")

我有一个包含16个元素的模型,但我只想显示更少的元素(例如,在启动时我可以使用" number_on_elements = 5等变量)

我认为不可能限制ListView中元素的最大数量,所以我想尝试将元素删除到QML端的QAbstractListModel。

可能吗?怎么样?

1 个答案:

答案 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不为零,模型可以报告小于其实际大小。