2012-10-02 56 views
1

我正在使用可编辑的QTableView + QStandardItemModel。在QTableView中与编辑器小部件的数据交互

当在表格视图中编辑单元格时,我希望在将新数据提交到表格视图时根据此特定单元格中的新输入数据执行一些操作

为此,我需要新的输入数据和当前的模型索引(或列号&行号)。 我尝试了一些槽,如

虚拟无效closeEditor(QWidget的*编辑, QAbstractItemDelegate :: EndEditHint提示)

虚拟无效commitData(QWidget的*编辑器)。

commitData似乎是我需要的,但是,参数只是编辑器,我无法弄清楚如何获得这个编辑器小部件中的文本。 我看了QTextEdit,但它不是QWidget的继承类。

我不知道是否有任何方法来获取编辑器小部件的数据(文本)和轴(列,行)?

回答

2

我建议实施您自己的物品代理,继承QStandardItemDelegate(或QAbstractItemDelegate)。在那里,你可以重写

void setModelData (QWidget * editor, QAbstractItemModel * model, const QModelIndex & index) const 

只要你自定义处理,然后调用QStandardItemDelegate::setModelData(...),以确保您的模型与新编辑的数据进行更新。

+0

谢谢! 我会尝试编写这样的继承类。 :) 似乎没有更简单的方法来做到这一点。 顺便说一下,我不熟悉编辑器小部件,当我调用setModelData时,如何获取当前激活的编辑器作为paremeter?还是我应该写一个定制的编辑器呢? 编辑器小部件总是让我困惑,我无法在网上找到有用的文档。 (例如,一旦我可以与commitData中的编辑器通信,我需要的功能应该非常简单,但我不知道该怎么做。) –

+1

您不必调用'setModelData() ';它应该在编辑器提交编辑操作时由视图调用。 – jmk

+0

明白了,谢谢:) –

1

itemChanged(QStandardItem*)信号由QStandardItemModel发出,只要项目的数据发生变化。

从给定QStandardItem,您可以直接检索行和列。要获得显示的文本,请将Qt::DisplayRole传递给项目的data()方法。

+0

非常感谢你:) 我试过了一些与数据变化有关的信号,这种信号在大多数情况下都是有用的。但是,即使数据未被更改,如果编辑模式被默认触发但无效值(需要用户输入,没有有效的默认值),并且在修改之前提交,我仍然需要执行检查。 –