這應該如何通過使用model-> setData()方法調用完成?QTableView:如何在程序中編輯不可編輯的單元格?
我已經獲得的來自QStandardItemModel稱爲「MyStandardItemModel」級。通過覆蓋受保護的虛擬標記方法,我使第三列和第四列不可編輯。這是怎麼回事:
#define TX_PACKET_COLUMN (4u)
#define RX_PACKET_COLUMN (5u)
Qt::ItemFlags MyStandardItemModel::flags(const QModelIndex& index) const
{
if (index.column() == TX_PACKET_COLUMN || index.column() == RX_PACKET_COLUMN)
{
return (QStandardItemModel::flags(index) & ~Qt::ItemIsEditable);
}
else
{
return QStandardItemModel::flags(index);
}
}
...
//Set model
ui->testCaseTableView->setModel(model);
這樣做,我不能編輯第三和第四列中的單元格。
現在,我想,當我雙擊這些細胞,彈出對話框出現。我將在該對話框的可編輯字段中修改一些數據,然後將其複製回代碼中的不可編輯單元格。
我想只寫了一個QTreeView則雙擊()處理,只是一些數據複製到細胞只是爲了看看是否有可能將數據複製到不可編輯的細胞。
此操作失敗,數據不寫入不可編輯的單元格。
在這裏你可以找到雙擊處理程序:
void MainWindow::on_testCaseTableView_doubleClicked(const QModelIndex &index)
{
QVariant variant;
variant.toString() = "AA";
if((index.column() == TX_PACKET_COLUMN)||(index.column() == RX_PACKET_COLUMN))
{
model->setData(index, variant); // set new value
}
}
使用setData(..)操作是在細胞清除已寫入的數據,但串「AA」是沒有得到寫入。請建議如何將一些數據複製到代碼中的不可編輯單元格。
爲什麼當它是關於表的時候,不會繼承QTIM而不是QAIM btw? – lpapp
單元格是否可編輯不應影響您如何以編程方式設置和顯示值。答案可能在於models :: setData和:: data方法。我會調試這些。 – user2672165
變體。toString()=「AA」; - >看起來不對,並且該錯誤將出現在您的模型子類的setData()實現中。你可以分享該代碼嗎?您在那裏正確發出數據更改信號? – lpapp