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:如何在开始/结束编辑时做些啥?的主要内容,如果未能解决你的问题,请参考以下文章