qt installEventFilter使用问题

xiaojin2883 2016-07-24 11:31:26
有一个qpushbuttton按钮,旁边是一个qlineedit编辑框,想实现的是:在按钮上按‘确定’时将焦点设到编辑框上进行高亮显示,待输入完数值,按‘确定’时去执行操作func1(),操作完再将焦点设回到按钮上,

按钮和编辑框都调用了installEventFilter,在eventFilter里通过‘pKeyEvent->key() == Qt::Key_Return’来过滤事件,用hasFocus和setfous来判断和设置焦点,

现在问题是:在按钮上按‘确定’键时没有高亮显示编辑框,而是直接去执行操作func1(),然后焦点自动回到按钮上,这样我输入不了数值,我只按了一下‘确定’键,正常焦点应该定位在编辑框上等待我输入数值再按确定键
...全文
2240 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
xiaojin2883 2016-07-27
  • 打赏
  • 举报
回复
因为有很多其它的按键需要响应,一个个用Button的槽函数很麻烦,我只在按下确定键且qlineedit获取焦点的时候才去执行func1,为什么在按下按键且qpushbutton获取焦点的时候也会执行func1?正常是要分两步
冷静忍耐 2016-07-27
  • 打赏
  • 举报
回复
引用 5 楼 xiaojin2883 的回复:
这样也可以,就想知道下原因,已经加了if(m_editxx->hasfoucs())和if(m_buttonxx->hasfoucs())判断了,在button上按键还是跑去执行edit里面的分支,然后焦点再回到button,以前不会,是在增加和删除几个按钮,调整了界面后出现的,找不到原因 [quote=引用 4 楼 u013466477 的回复:] [quote=引用 3 楼 xiaojin2883 的回复:] 因为有很多其它的按键需要响应,一个个用Button的槽函数很麻烦,我只在按下确定键且qlineedit获取焦点的时候才去执行func1,为什么在按下按键且qpushbutton获取焦点的时候也会执行func1?正常是要分两步
我觉得应该这么判断:在eventFilter里通过判断另一个参数obj if(obj == qlineedit && pKeyEvent->key() == Qt::Key_Return) { func1(); button->setFocus(); }[/quote][/quote] 如果是在编辑状态下,焦点在edit上,你去按回车键肯定是响应在edit上的 edit没有焦点才有可能响应你按钮上的,你这种焦点切换来判断,容易出问题 就像你点击按钮,焦点自动会回到按钮,然后你又要响应函数把焦点切到edit,过程中容易出问题
xiaojin2883 2016-07-27
  • 打赏
  • 举报
回复
这样也可以,就想知道下原因,已经加了if(m_editxx->hasfoucs())和if(m_buttonxx->hasfoucs())判断了,在button上按键还是跑去执行edit里面的分支,然后焦点再回到button,以前不会,是在增加和删除几个按钮,调整了界面后出现的,找不到原因
引用 4 楼 u013466477 的回复:
[quote=引用 3 楼 xiaojin2883 的回复:] 因为有很多其它的按键需要响应,一个个用Button的槽函数很麻烦,我只在按下确定键且qlineedit获取焦点的时候才去执行func1,为什么在按下按键且qpushbutton获取焦点的时候也会执行func1?正常是要分两步
我觉得应该这么判断:在eventFilter里通过判断另一个参数obj if(obj == qlineedit && pKeyEvent->key() == Qt::Key_Return) { func1(); button->setFocus(); }[/quote]
冷静忍耐 2016-07-27
  • 打赏
  • 举报
回复
引用 3 楼 xiaojin2883 的回复:
因为有很多其它的按键需要响应,一个个用Button的槽函数很麻烦,我只在按下确定键且qlineedit获取焦点的时候才去执行func1,为什么在按下按键且qpushbutton获取焦点的时候也会执行func1?正常是要分两步
我觉得应该这么判断:在eventFilter里通过判断另一个参数obj if(obj == qlineedit && pKeyEvent->key() == Qt::Key_Return) { func1(); button->setFocus(); }
冷静忍耐 2016-07-25
  • 打赏
  • 举报
回复
没必要用installEventFilter 在按钮上按‘确定’键时没有高亮显示编辑框,而是直接去执行操作func1() 是因为按钮被点击了,那按钮就会获得焦点,而且也会去func1() 所以你需要判断什么时候去func1(),什么时候只是lineEdit获得焦点
画茧自缚 2016-07-25
  • 打赏
  • 举报
回复
http://blog.csdn.net/zbw1185/article/details/50540352 其实你这里没必要用事件过滤器,用Button的槽函数就行了。button设置可以按下,当点击按钮时如果按钮被按下,则lineedit setfocus(), 如果没被按下则button获得焦点,其他的条件加进去就好了。

16,818

社区成员

发帖
与我相关
我的任务
社区描述
Qt 是一个跨平台应用程序框架。通过使用 Qt,您可以一次性开发应用程序和用户界面,然后将其部署到多个桌面和嵌入式操作系统,而无需重复编写源代码。
社区管理员
  • Qt
  • 亭台六七座
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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