我使用的是基本的QTableView + QAbstractTableModel架构。数据可以通过QAbstractItemDelegate子类进行编辑。一切都按预期工作,但我需要稍微改变编辑行为:
Qt默认行为是:
- 对于打开的委托编辑器,按Enter确认编辑
- 对于打开的委托编辑器,按Escape键可取消编辑
- 对于打开的委托编辑器,单击不同的表视图单元格可确认编辑
我想去掉最后一个。如果委托编辑器失去焦点,编辑将被取消(即,它将不会发出editingFinished()),这样用户只能通过按Enter键提交更改。
有什么方便的方法吗?
先谢谢你了
3条答案
按热度按时间vxbzzdmp1#
重写这个类,找出你不想要的最后一个函数,然后重写这个函数,让它的实现为空,然后它就像往常一样被调用,但现在它什么也不做(或者做其他事情,你正在编程让它做你想做的任何事情)
yzxexxkh2#
仅当用户与编辑器小部件交互时才在编辑器小部件上设置属性,并在修改模型之前检查
setModelData()
中是否正确设置了该属性。例如,我们有一个ButtonDelegate,它似乎在聚焦时被触发。我们应用了一个属性来知道
setModelData()
何时被点击触发,如下所示:afdcj2ne3#
我将覆盖模型中的
QAbstractItemModel::setData()
,并跳过在尝试为给定项设置相同数据时发出dataChanged()
。