QLineEdit编辑完,鼠标点击到窗口其他空白地方,如何触发一个信号表示输入完成?

weixin_38049216 2019-09-19 12:53:46
如题,我有一个Dialog,里面有个QLineEdit,需要对输入值做验证。希望在输入完成且焦点离开时验证,textChanged()信号是肯定不行的,还有个editingFinished()信号,当鼠标点击其他控件或者按tab键时会被发射。但是我希望当鼠标点击Dialog任何空白地方都能触发信号,而此时尽管焦点光标还在QLineEdit中闪动。请问该如何实现呢。 另外,当调用lineEdit->undo()这个函数,我发现它只能回退一次,比如说我现在lineEdit的text()是一个合法值100,我现在输入一个a,再输入一个b,此时验证发现输入不是个合法数字100ab,于是undo操作,但这时会变回100a而不是100。如果回退到最近一次获得焦点时的text() ?
...全文
2251 5 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
weixin_38068392 2019-09-19
  • 打赏
  • 举报
回复
可是focusoutevent不也是当焦点离开lineEdit时发生的吗,当鼠标点击窗口空白处,似乎焦点还在原处。
weixin_38068423 2019-09-19
  • 打赏
  • 举报
回复
或许可以试试改周围其他组件的focusPolicy来使得line edit强制失去焦点?
weixin_38075965 2019-09-19
  • 打赏
  • 举报
回复 5
这个问题本来放手了,今天又当bug来修,网上搜索又来到这里,发现居然是自己提问的帖子。installEventFilter 没啥用处,因为扑捉不到焦点失去,正确的办法是把dialog的focusPolicy设置为mouse click,然后line edit的editfinishing信号就够用了。
weixin_38079044 2019-09-19
  • 打赏
  • 举报
回复
谢谢楼主
weixin_38053367 2019-09-19
  • 打赏
  • 举报
回复
关于第二个undo的问题,自己想了个办法,就是设置一个私有变量,每次LineEdit接受正确的值时,存储到这个变量里面,undo时把该变量的值录入控件。第一个问题还是没办法,或许要截获鼠标事件,但怎么知道点中的是窗体的空白处呢?

474

社区成员

发帖
与我相关
我的任务
社区描述
其他技术讨论专区
其他 技术论坛(原bbs)
社区管理员
  • 其他技术讨论专区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧