Qt QPushButton 解决触摸屏点击 pressed样式表无效
目录
- 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样式表无效相关推荐
- 【Python】解决Django Admin管理界面样式表(CSS Style)丢失问题
[Python]解决Django Admin管理界面样式表(CSS Style)丢失问题 参考文章: (1)[Python]解决Django Admin管理界面样式表(CSS Style)丢失问题 ( ...
- 【B/S实践】解决:vs中修改样式表后不起作用的问题
缓存,有好多,cpu和内存之间的三级缓存,浏览器内的缓存! 缓存是因为速率不对等,通过缓存来加速内容的显示! 今天我在敲牛腩的时候遇到一个问题,找了半小时,才发现是缓存导致的问题! 试着运行aspx文 ...
- css修改鼠标点击的样式表
更改鼠标指针样式 鼠标指针的不同样式 平常,我们在浏览界面时,会发现鼠标的样式有所不同,鼠标的样式变化和cursor属性有关.cursor属性的几个关键字:default.pointer.wait.h ...
- Qt——功能:圆形渐变填充(样式表)
测试环境:win10.Qt Creator 4.11.1.5.14.2版本SDK 填充效果: radialGradient.h #ifndef RADIALGRADIENT_H #define RAD ...
- react中css样式表无效
今天在一个新的项目中写页面,遇到了一个css样式无效的问题,问题如下 上图这样写类名无效(已经import过样式文件) 需要像下图这样使用才可以 后来经过查阅发现应该是新项目开启了CSS Module ...
- qt样式表设置边框_QT样式表
QT样式表 一.QT样式表简介 1.QT样式表简介 QSS的主要功能是使界面的表现与界面的元素分离,使得设计皮肤与界面控件分离的软件成为可能. QT样式表是允许用户定制widgets组件外观的强大机制 ...
- 样式表(05):【纲】Qt Style Sheets Reference [官翻]
文章目录 定制样式的小部件列表 属性列表 图标列表 属性类型列表 伪状态列表 子控件列表 Qt Style Sheets Reference Qt样式表支持各种属性.伪状态和子控件,使得定制小部件的外 ...
- QT开发(六十四)——QT样式表(二)
QT开发(六十四)--QT样式表 本文主要翻译自QT官方文档Qt Style Sheets . 五.QT样式表参考 QT样式表支持多种的属性.状态和子控件,使得定制组件的外观成为可能. 1.组件 以下 ...
- QLabel设置背景颜色或字体失效显示“无效样式表”解决办法
点击ui中的label,右下角选择styleSheet添加样式表. 样式表中,可以选择资源.改变背景颜色.改变字体. 但是添加以后,显示样式表无效,如图: 原因: 无法识别资源类型 解决办法: 添加资 ...
- 用Qt写一个简单的音乐播放器(七):界面美化(QSS样式表)
一.前言 在用Qt写一个简单的音乐播放器(一):使用QMediaPlayer播放音乐中,我们已经知道如何去使用QMediaPlayer播放音乐. 在用Qt写一个简单的音乐播放器(二):增加界面(开始和 ...
最新文章
- “人文清华”讲坛——陈国青 大数据:颠覆的力量(附视频)
- 再见,备份——你好,真正的数据保护
- 第十二天Python学习记录
- 三点估算pmp_我本人是做项目经理的,我把考PMP也当成一个项目来规划
- Xamarin效果第十三篇之弹窗PopupPage
- SpringBoot—单元测试模板(controller层和service层)
- Rancher助力美国农业部的容器实践之路
- [转载] Docker网络原则入门:EXPOSE,-p,-P,-link
- BZOJ 5106 [CodePlus2017]汀博尔
- 5.23低版本到高版本问题
- 出生率新低!1978-2020中国人口出生率、死亡率及自然增长率变迁
- 如果可能,与孤独为友!
- html背景图片定位方法
- 语音芯片选型基础,如何计算声音文件的大小?
- 【海思篇】【Hi3516DV300】二、使用串口烧写映像
- Echelon/艾美捷——脂质与蛋白质相互作用的研究
- centos搭建微信代理服务器 docker
- 眩光和鬼影产生的原因分析
- HashiCorp Vault浅入门以及资料整理
- 区块链项目 - 9 UTXO优化
热门文章
- Android应用程序层的作用,Android应用程序框架-004.bean层
- c++switch实现猜拳_Animate/FLASH如何制作猜拳小游戏(AS3)
- 第一部分 第五章 数组 1102-1149
- 使用Java打开外部程序
- java response 输出word_java导出数据到word(一)
- java aspose例子_在Java中使用Aspose对文档操作示例
- python英文分句_【python分句的方法是什么?这些代码才是你需要的】- 环球网校...
- antd vue 位置变动 固钉消失_使用vue封装固钉Affix组件,滚动条到底部时自动吸附,离开底部时自动相对窗口固定...
- python部落课程资源_python部落刷题宝学到的内置函数
- easyswoole数据库连接池_Swoole Redis 连接池的实现