2017-07-20 66 views
0

我有一個QAbstractListModel C++模型類和QtQuick2 ListView如何禁用基於QAbstractListModel ListView中某些項目?

出於測試目的,我也創建一個QtWidgets QListView並連接到相同的模型進行比較。

我想告訴哪些項目應使用重載QAbstractListModel::flags()在這個例子中禁用的觀點一樣,:

Qt::ItemFlags flags(const QModelIndex& index) const 
{ 
    Qt::ItemFlags f = QAbstractListModel::flags(index); 
    if(index.isValid()) 
    { 
     f |= Qt::ItemIsUserCheckable; 

     if(index.row() % 3 == 2) 
      f &= ~Qt::ItemIsEnabled; 
    } 
    return f; 
} 

Complete model class here

可悲的是QtQuick2 ListVie而而QListView不能完全忽略這個標誌:

Left: QtWidgets QListView, Right: QtQuick2 ListView

我想ITEM2和ITEM5是存款保險計劃還能夠在QtQuick2中使用。如何實現這一目標?

回答

0

如果使用CheckDelegate你應該通過委託性質調整它:

delegate: CheckDelegate { 
     text: model.display 
     checked: model.checkState 
     enabled: <here is your predicate, for example "index % 2" for each odd item> 
    } 

正是由於QML使用不同的方法來在相反的數據可視化,以QWidgets。

+0

我真的想控制,從C++,我只是Implemeted一個它使用這種計算的例子。之後我的模型將查看數據庫列。我想,我不能避免'另一個自定義角色::數據()'返回一個布爾值啓用了,對不對? –

+1

@DanielBrunner如果您的謂詞依賴於模型數據,那麼正確的方法是將這些數據作爲模型角色共享,並用它在您的QML中構建表示邏輯,而不是在您的模型中。 – AnatolyS

+0

Qml是否使用標誌?我的意思是它忽略了'ItemIsUserCheckable'和'ItemIsEnabled'。它看起來只有小部件的意見跟着他們! –

相關問題