【发布时间】:2013-09-28 09:29:27
【问题描述】:
这应该如何使用model->setData()方法调用呢?
我从 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 编写一个 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”。请建议如何将一些数据复制到代码内的不可编辑单元格中。
【问题讨论】:
-
为什么不继承 QTIM 而不是 QAIM 顺便说一句,当它是关于表的时候?
-
单元格是否可编辑不应影响您以编程方式设置和显示值的方式。答案可能在于模型 ::setData 和 ::data 方法。我会调试那些。
-
variant.toString() = "AA"; -> 看起来不对,并且错误将出现在模型子类的 setData() 实现中。你能分享那个代码吗?您在那里正确发出数据更改信号吗?
标签: qt qtableview qabstractitemmodel