现象:

在主界面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. 肠里细菌“肚里蛔虫”:肠脑研究缘何越来越热
  2. 切割 Tomcat 的 catalina.out 文件,解决日志文件过大的问题
  3. DbHelperSQL 判断数据库表结构公用方法
  4. js自定义类,混合的构造函数/原型方式
  5. tcp_handle_req: Made 4 read attempts but message is not complete yet - closing connection
  6. LevelDB 源码剖析(一)准备工作:环境搭建、接口使用、常用优化
  7. [转载] Python Dictionary用法小结
  8. Redis 6.0 源码阅读笔记(12) -- Redis 集群建立流程
  9. JS中5秒中跳转到其他页面
  10. Python使用requests发送post请求的三种方式
  11. java实现根据pdf文件模板生成pdf文件
  12. 计算机职称英浯单词背记 app,8款经典背单词软件 帮你轻松过英语6级
  13. 游戏中常见的Bug也有你不知道的秘密
  14. 请各位大虾帮忙!小女子谢过了!:)
  15. 闲鱼平台API,item_app获得闲鱼原生数据
  16. Python查询天数
  17. 11大Java开源中文分词器的使用方法和分词效果对比,当前几个主要的Lucene中文分词器的比较...
  18. GraphicsLab Project之基于物理的着色系统(Physical based shading) - 基于图像的光照(Image Based Lighting)(Diffuse篇)
  19. 喇叭、扬声器的正负极问题
  20. 对于position定位的认识

热门文章

  1. java reuse_JAVA reuse
  2. python 如何批量提取文件中的字符_如何用Python批量提取PDF文本内容?
  3. R语言空间数据分析学习笔记1——读取矢量数据并可视化
  4. matlab坐标画正六边形,Matlab任意正六边形随机撒点实现
  5. C语言做一个36除以2的循环,C语言循环练习2,建议做做
  6. 【电信学】【2013.09】地图辅助的室内外导航应用
  7. 【echarts】柱图+折线图
  8. 通过网络调试助手连接阿里云
  9. 第五讲:JAF架构及其在JavaMail中的应用
  10. 时光倒流——童年的痕迹