我有一個基於QStandardItemModel的QTableView。 我想將第一列設置爲「只讀」,所有其他列可編輯。QTableView - 將第一列設置爲「只讀」
我不是QT和OOP的專家,我在網絡和QT文檔中搜索過,我明白我需要重新實現模型的標誌(const QModelIndex & index)函數,但我不知道如何以及在哪裏重新實施。
在此先感謝!
我有一個基於QStandardItemModel的QTableView。 我想將第一列設置爲「只讀」,所有其他列可編輯。QTableView - 將第一列設置爲「只讀」
我不是QT和OOP的專家,我在網絡和QT文檔中搜索過,我明白我需要重新實現模型的標誌(const QModelIndex & index)函數,但我不知道如何以及在哪裏重新實施。
在此先感謝!
您應該創建一個從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
方法。
那麼你到目前爲止有什麼? – SBH 2014-10-28 08:39:37
我認爲重新實現應該看起來像這樣: if(index.column()== 1){Q}返回QAbstractModel :: flags()&〜Qt :: ItemIsEditable; } 但我不知道把這段代碼放在哪裏。 – splunk 2014-10-28 08:44:44