2016-10-04 55 views
0

最後的元素我有一個從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 <5',並且您的視圖顯示該組。 – user2436719

回答

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不爲零,該模型可以報告比其實際尺寸更小。

+0

太棒了!非常簡單的解決方案。代表模型看起來也不錯。我在C++中使用proxymodels,但我需要QML方面的解決方案 –