我正在使用可编辑的QTableView + QStandardItemModel。
在编辑表格视图中的单元格时,我想在将新数据提交到表格视图中时,根据此特定单元格中的新输入数据执行一些操作。
为此,我需要新的输入数据和当前模型索引(或列和行号)。我尝试了一些插槽,例如
虚拟无效关闭编辑器(QWidget * 编辑器, QAbstractItemDelegate::EndEditHint hint
)
和
Virtual void commitData ( QWidget * editor ).
commitData 似乎是我需要的,但是,参数只是编辑器,我无法弄清楚如何在此编辑器小部件中获取文本。我看了QTextEdit,但它不是QWidget的继承类。
我想知道是否有任何方法可以获取编辑器小部件的数据(文本)和轴(列、行)?
我建议实现自己的项目委托,继承QStandardItemDelegate
(或QAbstractItemDelegate
)。在那里你可以覆盖
void setModelData ( QWidget * editor, QAbstractItemModel * model, const QModelIndex & index ) const
只需进行自定义处理,然后调用QStandardItemDelegate::setModelData(...)
以确保使用新编辑的数据更新模型即可。
每当项目的数据更改时,QStandardItemModel
都会发出itemChanged(QStandardItem*)
信号。
从给定的QStandardItem
,您可以直接检索行和列。若要获取显示的文本,请将Qt::DisplayRole
传递给项的data()
方法。