2014-10-28 278 views
1

我有一個基於QStandardItemModel的QTableView。 我想將第一列設置爲「只讀」,所有其他列可編輯。QTableView - 將第一列設置爲「只讀」

我不是QT和OOP的專家,我在網絡和QT文檔中搜索過,我明白我需要重新實現模型的標誌(const QModelIndex & index)函數,但我不知道如何以及在哪裏重新實施。

在此先感謝!

+1

那麼你到目前爲止有什麼? – SBH 2014-10-28 08:39:37

+0

我認爲重新實現應該看起來像這樣: if(index.column()== 1){Q}返回QAbstractModel :: flags()&〜Qt :: ItemIsEditable; } 但我不知道把這段代碼放在哪裏。 – splunk 2014-10-28 08:44:44

回答

4

您應該創建一個從QStandardItemModel繼承的新類,重新實現方法flags並使用您的新類而不是標準類。

class MyModel : public QStandardItemModel 
{ 
public: 
    virtual Qt::ItemFlags flags(const QModelIndex& index) const override 
    { 
     Qt::ItemFlags result = QStandardItemModel::flags(index); 
     if (index.column() == 0) //0 is the first column! 
     { 
      result &= ~Qt::ItemIsEditable; 
     } 
     return result; 
    } 
} 

另一種方式做同樣的:
- 創建
QStandardItem繼承一個新的類 - 以同樣的方式
重新實現flags - 調用QStandardItemModel::setItemPrototype新類
這樣的一個實例有點複雜,因爲你還需要重新實現QStandardItem::clone方法。

+0

你的意思是'result | =〜Qt :: ItemIsEditable;'?我認爲OR操作符是我們正在尋找的 – sami1592 2016-04-27 17:53:08

+0

@ sami1592不,我們應該刪除'editable'標誌。 '| ='將會啓用所有標誌 – Ezee 2016-04-28 13:18:47