2016-08-19 43 views
0

我已經有一個QTreeView與自己的模型和一個委託,能夠顯示QComboBox在這個QTreeView的一列。僅在某些特定單元格中顯示QComboBox(通過委託)?

現在依賴於樹中顯示的數據,必須啓用並激活QComboBox僅用於某些單元格,而不是整個列。我已經發現,當委託的函數createEditor()返回NULL時,不顯示和處理QComboBox。但是:createEditor()沒有提供對模型的引用,所以如果QCombobox必須顯示或不顯示,我不會要求它提供給定的索引。另一方面,我不能將相關信息存儲在代理中(因爲它是通用的,這種解決方案會違反視圖和數據之間的分離)。

所以:我如何從createEditor()中訪問模型,或者我有什麼其他的可能性來爲QTreeView的某些單元動態地隱藏委託的QComboBox?

謝謝!

回答

3

您可以從QModelIndex

QWidget * createEditor(QWidget * parent, const QStyleOptionViewItem & option, const QModelIndex & index) const 
{ 
    const QAbstractItemModel * model = index.model(); 
    //..... 
} 

獲取模型讓您同時擁有索引和模式,我認爲是足夠的,以確定是否創建一個組合框或沒有。

從問題不清楚,如果其他單元格必須可以由另一個小部件編輯。如果不是這種情況,您可以簡單地使單元格不可編輯返回模型中的正確標誌(僅對可編輯單元格包括Qt::ItemIsEditable)。請參見QAbstractItemModel::flags

相關問題