• 2879阅读
  • 4回复

[提问]请问如何知道QTableView离开当前编辑行? [复制链接]

上一主题 下一主题
离线clickto
 

只看楼主 倒序阅读 楼主  发表于: 2018-06-22
我使用一个QTableView控件,需要在鼠标点击当前编辑行之外的其它地方(本表其他行或本view界面之外的其它地方)时提交数据
本表其他行,可以用selectionModel的currentRowChanged信号搞定,这个我没问题,问题在于另一个要求,即要准确知道鼠标点击了本view之外的其它地方。
我试图重写focusOutEvent和focusInEvent,可发现两个问题:
1、我使用了Delegate,一旦进入Delegate编辑时,会进入focusOutEvent,导致提交,而此时还在编辑呢!
2、layout之后,鼠标点击view的空白处,会进入focusInEvent,南辕北辙。。。

总结一句话,我需要知道鼠标点击了非当前编辑的行(不管是本view还是view之外的其它界面),哪位大侠能给个解决方案?谢谢!
离线never_forget

只看该作者 1楼 发表于: 2018-06-23
widget 控件自动实现点击获取 focus,你的编辑完成就提交的想法很好,但是在这个里面实现可能有点困难, Model View Delegate 其实都是独立的东西,数据编辑完成的信号是Delegate发出来的,你的提交信号可能需要放到 Delegate 里面去,在 View 里面纠结可能的得不到你想要的结果,不然就牺牲一下效果,给个按钮提交数据。你说的现象都是合理的,不是 BUG~
离线clickto

只看该作者 2楼 发表于: 2018-06-23
谢谢楼上的关注。可能我描述的不是很清楚。我现在不是要编辑完就提交,编辑当前行的时候,不管是哪一列,哪一个delegate,都不用提交,而当鼠标点击当前行之外的地方时,才触发提交,老板要求,说是减少用户操作步骤,提升体验,没办法啊。
离线gzfstudy

只看该作者 3楼 发表于: 2018-06-26
你可以在QTableView控件的父窗口中使用EventFilter()监控鼠标按键的操作。使用tableView->indexAt(event->pos())找到当前点击的QModelIndex。如果!Index.isvalid(),那么鼠标点击了其他的地方
离线clickto

只看该作者 4楼 发表于: 2018-06-27
感谢楼上关注。我现在是使用focusChanged配合EventFilter来判断的,回头试一下你的方法
快速回复
限100 字节
 
上一个 下一个