model->setData() メソッド呼び出しを使用してこれを行うにはどうすればよいですか?
QStandardItemModel から「MyStandardItemModel」というクラスを派生させました。保護された仮想フラグ メソッドをオーバーライドして、3 番目と 4 番目の列を編集不可にしました。これはそれがどのようになるかです:
#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);
これを行うと、3 列目と 4 列目のセルを編集できなくなります。
ここで、これらのセルをダブルクリックすると、ポップアップ ダイアログが表示されるようにします。そのダイアログの編集可能なフィールドでいくつかのデータを変更し、それをコード内の編集不可能なセルにコピーして戻します。
QTreeView の doubleclick() ハンドラーを作成し、一部のデータをセルにコピーして、編集不可能なセルにデータをコピーできるかどうかを確認しようとしました。
この操作は失敗し、データは編集不可のセルに書き込まれません。
ここでは、ダブルクリック ハンドラーを見つけることができます。
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" は書き込まれていません。コード内の編集不可能なセルにデータをコピーする方法を提案してください。