QTableView: how to edit non-editable cells in the program?
How should this be done by using the model->setData() method call?
I have derived a class called "MyStandardItemModel" from
QStandardItemModel. I have made my third and fourth columns non-editable
by overriding the protected virtual flags method. This is how it goes:
#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);
Having this done, I am not able to edit the cells in the third and fourth
column.
Now, I want that when I double click on these cells, a pop-up dialog comes
up. I will modify some data in the editable field of that dialog, and then
copy it back to the non editable cells inside the code.
I tried to just write a doubleclick() handler for the QTreeView and just
copy some data to the cells just to see if it is possible to copy data to
the non-editable cells.
This operation is failing, and the data is not written into the
non-editable cells.
Here you can find the double click handler:
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
}
}
The setData(..) operation is clearing the already written data in the
cells, but string "AA" is not getting written. Please suggest how to copy
some data to non-editable cells inside the code.
No comments:
Post a Comment