目录

  • 1.简述
  • 2.解决思路
  • 3.代码

1.简述

QPushButton{backgroud:red;}
QPushButton:pressed{backgroud:gray;}

Qt5.7.1 以上样式表,在Win10的触摸屏上,触摸不松开,按钮没有按下效果。

2.解决思路

翻阅文章,虽然没有找到解决办法,但是有得到一个有价值的信息,触摸事件和鼠标事件有差异。
先打印按钮鼠标和触摸按下的事件有什么区别。
继承QPushButton,设置接受触摸事件,重写event()函数,打印点击按钮所产生的事件

setAttribute(Qt::WA_AcceptTouchEvents,true); //接受所有触摸事件

打印正常鼠标点击按钮产生的事件

QEvent::QMousePressed        //鼠标按下
QEvent::QMouseReleased      //鼠标松开

打印触摸按钮产生的事件

QEvent::QTouchBegin          //触摸按下 QEvent::QTouchUpdate     //触摸保持QEvent::QTouchEnd         //触摸松开后
QEvent::QMousePressed       //触摸松开后
QEvent::QMouseReleased      //触摸松开后

从触摸事件来看,手指松开的时候pressed和released事件先后发出,QPushButton连续绘制了pressed和normal的样式。几乎没啥时间间隔,也就看不到pressed按下的效果。

QTouchBegin和QTouchEnd才是手指按下和松开的时间段。

如何解决?
把触摸后的事件修改为以下顺序,让pressed和released有时间间隔。

QEvent::QTouchBegin          //触摸按下
QEvent::QMousePressed       //触摸按下 QEvent::QTouchUpdate     //触摸保持QEvent::QTouchEnd         //触摸松开后
QEvent::QMouseReleased      //触摸松开后

界面刷新是事件触发的,在QTouchBegin事件产生的时候,模拟一个pressed事件,
QTouchEnd的事件产生的时候,再模拟一个QMouseReleased事件,驱动QPushbutton重绘按钮样式。
注意!!! 还需要去掉QTouchEnd后的QMousePressed和QMouseReleased事件,否则clicked信号会触发两次,导致执行两次槽函数。

3.代码

CTouchButton.cpp

#include "CTouchButton.h"
#include <QEvent>
#include <QDebug>
#include <QCoreApplication>
#include <QMouseEvent>
#include <QTouchEvent>CTouchButton::CTouchButton(QWidget *parent): QPushButton(parent)
{setAttribute(Qt::WA_AcceptTouchEvents,true);
}bool CTouchButton::event(QEvent *e)
{switch (e->type()) {case QEvent::TouchBegin:{m_bTouchEnd = false;QMouseEvent mouseEvent(QEvent::MouseButtonPress,QPointF(0,0),Qt::LeftButton,Qt::LeftButton,Qt::NoModifier);QCoreApplication::sendEvent(this,&mouseEvent);e->accept();return true;} break;case QEvent::TouchEnd:{QMouseEvent mouseEvent(QEvent::MouseButtonRelease,QPointF(0,0),Qt::LeftButton,Qt::LeftButton,Qt::NoModifier);QCoreApplication::sendEvent(this,&mouseEvent);m_bTouchEnd = true;e->accept();return true;} break;case QEvent::MouseButtonPress:case QEvent::MouseButtonRelease:{if(m_bTouchEnd){e->accept();return true;}}break;default:break;}return QPushButton::event(e);
}

CTouchButton.h

#ifndef CTOUCHBUTTON_H
#define CTOUCHBUTTON_H#include <QPushButton>class CTouchButton : public QPushButton
{Q_OBJECT
public:explicit CTouchButton(QWidget *parent = 0);protected:bool event(QEvent *e);private:bool m_bTouchEnd = false;
};#endif // CTOUCHBUTTON_H

Qt QPushButton 解决触摸屏点击 pressed样式表无效相关推荐

  1. 【Python】解决Django Admin管理界面样式表(CSS Style)丢失问题

    [Python]解决Django Admin管理界面样式表(CSS Style)丢失问题 参考文章: (1)[Python]解决Django Admin管理界面样式表(CSS Style)丢失问题 ( ...

  2. 【B/S实践】解决:vs中修改样式表后不起作用的问题

    缓存,有好多,cpu和内存之间的三级缓存,浏览器内的缓存! 缓存是因为速率不对等,通过缓存来加速内容的显示! 今天我在敲牛腩的时候遇到一个问题,找了半小时,才发现是缓存导致的问题! 试着运行aspx文 ...

  3. css修改鼠标点击的样式表

    更改鼠标指针样式 鼠标指针的不同样式 平常,我们在浏览界面时,会发现鼠标的样式有所不同,鼠标的样式变化和cursor属性有关.cursor属性的几个关键字:default.pointer.wait.h ...

  4. Qt——功能:圆形渐变填充(样式表)

    测试环境:win10.Qt Creator 4.11.1.5.14.2版本SDK 填充效果: radialGradient.h #ifndef RADIALGRADIENT_H #define RAD ...

  5. react中css样式表无效

    今天在一个新的项目中写页面,遇到了一个css样式无效的问题,问题如下 上图这样写类名无效(已经import过样式文件) 需要像下图这样使用才可以 后来经过查阅发现应该是新项目开启了CSS Module ...

  6. qt样式表设置边框_QT样式表

    QT样式表 一.QT样式表简介 1.QT样式表简介 QSS的主要功能是使界面的表现与界面的元素分离,使得设计皮肤与界面控件分离的软件成为可能. QT样式表是允许用户定制widgets组件外观的强大机制 ...

  7. 样式表(05):【纲】Qt Style Sheets Reference [官翻]

    文章目录 定制样式的小部件列表 属性列表 图标列表 属性类型列表 伪状态列表 子控件列表 Qt Style Sheets Reference Qt样式表支持各种属性.伪状态和子控件,使得定制小部件的外 ...

  8. QT开发(六十四)——QT样式表(二)

    QT开发(六十四)--QT样式表 本文主要翻译自QT官方文档Qt Style Sheets . 五.QT样式表参考 QT样式表支持多种的属性.状态和子控件,使得定制组件的外观成为可能. 1.组件 以下 ...

  9. QLabel设置背景颜色或字体失效显示“无效样式表”解决办法

    点击ui中的label,右下角选择styleSheet添加样式表. 样式表中,可以选择资源.改变背景颜色.改变字体. 但是添加以后,显示样式表无效,如图: 原因: 无法识别资源类型 解决办法: 添加资 ...

  10. 用Qt写一个简单的音乐播放器(七):界面美化(QSS样式表)

    一.前言 在用Qt写一个简单的音乐播放器(一):使用QMediaPlayer播放音乐中,我们已经知道如何去使用QMediaPlayer播放音乐. 在用Qt写一个简单的音乐播放器(二):增加界面(开始和 ...

最新文章

  1. “人文清华”讲坛——陈国青 大数据:颠覆的力量(附视频)
  2. 再见,备份——你好,真正的数据保护
  3. 第十二天Python学习记录
  4. 三点估算pmp_我本人是做项目经理的,我把考PMP也当成一个项目来规划
  5. Xamarin效果第十三篇之弹窗PopupPage
  6. SpringBoot—单元测试模板(controller层和service层)
  7. Rancher助力美国农业部的容器实践之路
  8. [转载] Docker网络原则入门:EXPOSE,-p,-P,-link
  9. BZOJ 5106 [CodePlus2017]汀博尔
  10. 5.23低版本到高版本问题
  11. 出生率新低!1978-2020中国人口出生率、死亡率及自然增长率变迁
  12. 如果可能,与孤独为友!
  13. html背景图片定位方法
  14. 语音芯片选型基础,如何计算声音文件的大小?
  15. 【海思篇】【Hi3516DV300】二、使用串口烧写映像
  16. Echelon/艾美捷——脂质与蛋白质相互作用的研究
  17. centos搭建微信代理服务器 docker
  18. 眩光和鬼影产生的原因分析
  19. HashiCorp Vault浅入门以及资料整理
  20. 区块链项目 - 9 UTXO优化

热门文章

  1. Android应用程序层的作用,Android应用程序框架-004.bean层
  2. c++switch实现猜拳_Animate/FLASH如何制作猜拳小游戏(AS3)
  3. 第一部分 第五章 数组 1102-1149
  4. 使用Java打开外部程序
  5. java response 输出word_java导出数据到word(一)
  6. java aspose例子_在Java中使用Aspose对文档操作示例
  7. python英文分句_【python分句的方法是什么?这些代码才是你需要的】- 环球网校...
  8. antd vue 位置变动 固钉消失_使用vue封装固钉Affix组件,滚动条到底部时自动吸附,离开底部时自动相对窗口固定...
  9. python部落课程资源_python部落刷题宝学到的内置函数
  10. easyswoole数据库连接池_Swoole Redis 连接池的实现