现象:

在主界面MainWindow界面中存在QCombobox和QPushButton。当使用鼠标或者触控点击QComboBox时会出现下拉列表。

1.使用鼠标点击QPushButton,会正常产生click事件消息,同时响应其槽函数,于此同时QComboBox的下拉列表会隐藏;

2.使用触控点击QPushButton,只产生QPushButton的Press状态的QSS效果,就变成异常,也并不会产生Click事件,但同时QComboBox的下拉列表会隐藏。

分析:

通过qapplication打印以上操作的MouseEvent和TouchEvent事件,发现触控屏操作的事件发生过程如下:

QPushButton响应的Press事件在QComboBox下拉列表hideEvent之后。

因此,

提出两个方案解决以上异常问题:

1.修改QPushButton的QSS效果为Release状态,但是对于有按下效果如长按的按钮就会不符合要求,同时鼠标和触控的操作也会不一致;

2.将QPushButton在此类情况下的Press事件拦截,即在出现了QComboBox下拉列表时,将Qapplicaiton的静态标志Flag=true;当下一个产生MouseButtonPress事件时,对点击事件出现异常的按钮或者其他控件进行过滤,设置Flag=false,返回True,就可以阻止鼠标操作产生点击事件,和触控操作保持一致。其关键代码如下:

QApplication中处理:

bool application::notify(QObject * obj, QEvent *event)
{switch (event->type()){case QEvent::MouseButtonPress: { //qDebug() << "application:" << obj->metaObject()->className() << ",press event type" << event->type();const char*objClassName = obj->metaObject()->className();if (objClassName == QStringLiteral("UIPushButton")||objClassName == QStringLiteral("QPushButton")||objClassName == QStringLiteral("RunDesCriptionButton")||objClassName == QStringLiteral("QLabel")){if (m_comboBoxPopup){m_comboBoxPopup = false;return true;}}}
。。。。。。。。
}

QComboBox下的处理:下拉列表弹出后将标记Flag设置为True,其他情况都不需要进行过滤

bool UIComboBoxEx::eventFilter(QObject *target, QEvent *event)
{if(target == view()->viewport()){if(event->type() == QEvent::MouseButtonPress) {qDebug() << "viewport QEvent::MouseButtonPress";viewOnMousePress(static_cast<QMouseEvent *>(event));return true;} else if(event->type() == QEvent::MouseButtonRelease) {qDebug() << "viewport QEvent::MouseButtonRelease";viewOnMouseRelease(static_cast<QMouseEvent *>(event));return true;} else if(event->type() == QEvent::MouseMove) {qDebug() << "viewport QEvent::MouseMove";viewOnMouseMove(static_cast<QMouseEvent *>(event));return true;} else if (event->type() == QEvent::Show) {application::m_comboBoxPopup = true;}}return QComboBox::eventFilter(target, event);
}

Qt触摸屏点击无MouseButtonRelease产生的问题相关推荐

  1. 西门子KTP二代精简触摸屏点击无反应,触摸失效的处理对策

    西门子KTP二代精简触摸屏点击无反应,触摸失效的处理对策 如果屏触摸失效,例如之前操作正常,某一天开始任何触摸动作都不执行. 可以尝试在屏的USB接口上接一个USB鼠标,如果接入鼠标也不能操作,需要判 ...

  2. linux qt kits叹号,windows系统,HBuilderX无法启动、点击无反应、或启动报错的解决方案...

    本帖文章已集成到: hx产品文档 前言 . 此帖子为windows解决方案,mac请参考:mac解决方案 windows的zip包,解压时间比较长,请勿中断! 如中断了解压,请重新解压 . Windo ...

  3. linux中c语言对滑屏进行判断,自动化测试程序之二模拟触摸屏点击事件跟滑动事件(C语言)...

    一.测试程序编写说明 终端设备上运行的是LINUX+QT应用程序,使用触摸屏进行人机交互.经过测试人员长时间的人机交互测试,来确认系统的功能是否满足需求后.现在需要编写一个自动化的测试程序模拟触摸屏点 ...

  4. QT触摸屏上TouchEvent 和 MouseEvent触发的顺序

    项目中遇到触摸屏上 ,手长按自定义控件,MousePresssEvent 和 MouseReleaseEvent事件几乎同时触发,无法达到鼠标长按的效果,通过添加日志,QT触摸屏上TouchEvent ...

  5. qt 在点击菜单下的动作之后获取该菜单的名称

    文章目录 qt 在点击菜单下的动作之后获取该菜单的名称 问题: 解决过程: qt 在点击菜单下的动作之后获取该菜单的名称 问题: QMenu 类下有4个信号: void aboutToHide() v ...

  6. qmenu qt 关闭,Qt实现点击菜单项后QMenu不关闭功能

    Qt实现点击菜单项后QMenu不关闭功能 Qt实现"点击菜单项后QMenu不关闭"功能 题目里的意思说起来有点儿绕嘴.其实是这么个事:在QMenu里添加了很多QAction项,每项 ...

  7. 电脑无规律无响应,鼠标能动但是点击无反应一直在转圈。

    电脑无规律无响应,鼠标能动但是点击无反应一直在转圈. 重装系统后,问题仍旧,推测是硬件问题,除了硬盘外电脑全部更换,问题仍旧,应该是硬盘问题,换了硬盘,装下系统,问题不在,用段时间继续观察.

  8. 点击按钮没有反应,onclick函数点击无反应的原因

    今天写代码的时候,有一个按钮onclick函数一直点击无反应,用alert去调试也依然跳不出来,说明根本没有调用,后来发现是这个原因: <input type="button" ...

  9. 桌面计算机未响应怎么办,电脑桌面假死(点击无反应)怎么解决?试试这三种处理方法吧...

    原标题:电脑桌面假死(点击无反应)怎么解决?试试这三种处理方法吧 不少朋友提到遇到过电脑桌面假死,桌面图标怎么点击都没反应,最后无奈只能强制关机才能解决问题.有什么方法可以不用强制关机就能解决电脑假死 ...

最新文章

  1. 【Zookeeper入门】相关概念总结
  2. 【全栈项目上线(vue+node+mongodb)】06.nodejs服务上线(生产环境前后分离的vue项目中怎么解决跨域问题)...
  3. 爬虫篇——代理IP爬取备用及存储
  4. 2.1.1进程的概念 组成和特征
  5. 队列实现栈 | 栈实现队列
  6. 科普篇 | 推荐系统之矩阵分解模型
  7. 硬核妹子的创意设计:舌头控制器
  8. 字体感觉小了 引入的vant_动态字体海报如何设计与制作?
  9. poj-1201 Intervals(差分约束)
  10. spock做post请求get请求,在springboot环境下使用gradle构建工具的demo,IDEA的开发工具
  11. 【Java 正则表达式】单字符匹配、预定字符、量词、Matcher(贪婪、勉强、独占模式)、捕获组、边界匹配符、String类与正则表达式
  12. 华为HMS核心服务全面开放 赋能开发者共筑智慧新生态
  13. mojing SDK根据坐标进行移动
  14. 项目管理:研发项目经理为何难做
  15. android退出中国,曾经的安卓机皇宣布关闭中国社区,彻底放弃手机业务了?
  16. 软件测试工程师的日常工作流程
  17. win10设置计算机关机时间,win10系统怎样设置定时关机 win10有定时关机设置吗
  18. 基于深度学习智能问答笔记
  19. java 求反正切函数 角度,弧度 。 arctanx
  20. 分分钟安装VMware,并安装linux操作系统

热门文章

  1. el-step 的使用
  2. redis 槽点重新分配 集群_2019年校招,你经历了什么?
  3. 蓉华软创创始人:在华为9年后,我为什么选择当一名老师?
  4. 流氓软件(突然出现的提示框)
  5. Unity小地图坐标映射
  6. 《HelloGitHub》第 63 期
  7. python ocr识别库_轻松识别文字,这款Python OCR库支持超过80种语言
  8. 中兴通讯5G技术再度创新,成功验证5G毫米波独立组网技术方案
  9. 计算机换cpu开机后长鸣,计算机开机长鸣不止,内存频率问题
  10. 快递鸟物流跟踪api