删除QML模型(QAbstractListModel从C++)

问题描述:

最后的元素我有一个从C++(QAbstractListModel)QML模型和我使用的列表视图anfd GridView的表现出来(例如,我的模式“DM_valves”)删除QML模型(QAbstractListModel从C++)

我有一个模型有16个元素,但我只想显示较少的元素(例如,在启动时可以使用像“number_on_elements = 5”的变量)

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

是可能的吗?如何?

+0

一种方法是添加一个过滤代理,它的'number_of_elements'属性暴露给QML。 –

+0

您是否尝试过使用'DelegateModel' [link](http://doc.qt.io/qt-5/qml-qtqml-models-delegatemodel.html)?您可以创建一个名为'firstGroup'的组,并且该组中的条件将为'index user2436719

你可以尝试这样简单的东西:

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不为零,该模型可以报告比其实际尺寸更小。

+0

太棒了!非常简单的解决方案。代表模型看起来也不错。我在C++中使用proxymodels,但我需要QML方面的解决方案 –