Как это сделать с помощью вызова метода model->setData()?
Я получил класс под названием «MyStandardItemModel» из QStandardItemModel. Я сделал третий и четвертый столбцы недоступными для редактирования, переопределив метод защищенных виртуальных флагов. Вот как это происходит:
#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);
Сделав это, я не могу редактировать ячейки в третьем и четвертом столбцах.
Теперь я хочу, чтобы при двойном щелчке по этим ячейкам появлялось всплывающее диалоговое окно. Я изменю некоторые данные в редактируемом поле этого диалогового окна, а затем скопирую их обратно в нередактируемые ячейки внутри кода.
Я попытался просто написать обработчик doubleclick() для 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" не записывается. Подскажите, пожалуйста, как скопировать некоторые данные в нередактируемые ячейки внутри кода.