QTableView:如何在开始/结束编辑时做些啥?

Posted

技术标签:

【中文标题】QTableView:如何在开始/结束编辑时做些啥?【英文标题】:QTableView: how to do something on start/end editing?QTableView:如何在开始/结束编辑时做些什么? 【发布时间】:2011-03-15 07:54:03 【问题描述】:

是否有任何信号(我在文档中找不到任何东西)发出 用户开始和结束QTableView 小部件单元格编辑?

我想从表格模型中执行一些功能,然后用户开始编辑任何单元格并在用户结束编辑时执行另一个功能。我该怎么做?

【问题讨论】:

【参考方案1】:

用户开始/结束编辑时的操作可以通过实现您自己的Delegate 来完成。

QAbstractItemModel 中还有dataChanged 信号。

【讨论】:

【参考方案2】:

dataChanged 信号的问题在于,它也会在以编程方式更改数据 (setData) 时发出。如果程序调用 setData(),并且不应该触发 slot,那么唯一的解决方案就是实现一个自定义委托。

QAbstractItemView 具有虚拟方法 commitData 和 closeEditor,但它们不将索引作为参数,我不能 100% 确定 currentIndex() 总是正确的......(肯定 QAIV 不依赖于此,因为持久编辑器,所以它有一个内部哈希)。

【讨论】:

【参考方案3】:

我会从 QTableView 派生一个类,并重写函数 selectionChanged 以在用户开始编辑单元格时实现特定行为,并重写函数 dataChanged 以实现修改单元格后的特定行为。

【讨论】:

【参考方案4】:

就像上面石墨建议的那样,我通常在我的模型中使用 dataChanged,通常是 QSqlTableModel,以找出编辑何时结束。但我同意在 QTableView 本身中为更详细的用户操作提供信号是有意义的。

connect(model,SIGNAL(dataChanged(QModelIndex,QModelIndex)),this,SLOT(updatePlot()));

【讨论】:

以上是关于QTableView:如何在开始/结束编辑时做些啥?的主要内容,如果未能解决你的问题,请参考以下文章

在 pl sql 中的所有异常情况下无论如何都要做些啥吗?

我可以对 Intents 和 List 视图做些啥

用mac地址可以能做些啥?

返回响应后做些啥?

对应用于 Glide 的占位符做些啥?

无法以用户身份访问 mysql。我能做些啥? [复制]