QPushButton 点击信号分析
QPushButton 点击信号分析
QPushButton有三个很重要的信号跟点击有关
- pressed
- clicked
- toggled
表面上看,pressed和clicked都会在点击按钮时触发,它们有什么区别呢?toggled好像有时候触发,有时候不触发,到底怎么回事呢?下面就一起聊一下这三个信号
首先,这三个信号都是从QAbstractButton继承来的,也就是说,下面情况对QAbstractButton的所有子类都适用,
先来看第一个问题
pressed和clicked,可以编写一段代码来测试一下QObject::connect( ui->pushButton,&QToolButton::clicked,[]{
qDebug()<<"clicked";
});
QObject::connect( ui->pushButton,&QToolButton::pressed,[]{
qDebug()<<"pressed";
});
运行后点击按钮,结果为
Debugging starts
pressed
clicked
pressed
clicked
pressed
clicked
也就是说pressed先触发(按下),clicked后触发(弹起),而且如果将鼠标按压按钮,按住不动会发现只输出了“pressed”,直到放手弹起按钮,才会输出“clicked”
另外,如果在pressed 对应的槽函数中打断点,会发现断点运行后并不会执行“clicked”,这种情况跟我们在鼠标按下事件和鼠标弹起事件中同时打断点的情况一样,调试按下触发的代码后,弹起的事件代码不会触发。
再来看第二个问题
帮助文档里面写着按钮状态变化的时候,这个信号会触发,所以这个信号触发的前提是按钮的Checkable属性要设置成true,这样在点击按钮之后就会触发toggled信号测试代码如下:
QObject::connect( ui->pushButton,&QToolButton::toggled,[](bool b){
qDebug()<<"toggled"<<b;
});
ui->pushButton->setCheckable(true);
那么还有一个问题 pressed和clicked,和toggled 的先后顺序又是怎样的,我们将两段测试代码同时添加,运行之后点击按钮,结果:
Debugging starts
pressed
toggled true
clicked
pressed
toggled false
clicked
pressed
toggled true
clicked
...
结论:
- pressed最先执行,相当于按下操作
- 按下之后,按钮状态发生变化,触发toggled
- clicked最后执行,相当于弹起操作
QPushButton 点击信号分析的更多相关文章
- HackRF实现无线门铃信号分析重放
文章特点:数据解码方面实在是没什么信心,存在分析错乱的可能性,所幸发出来共同探讨,恳请鞭策. 0x01 概述 这是一款工作在315Mhz频段的无线遥控门铃,根据查阅官方手册以及芯片信息,确定其采用了e ...
- 精通Web Analytics 2.0 (6) 第四章:点击流分析的奇妙世界:实际的解决方案
精通Web Analytics 2.0 : 用户中心科学与在线统计艺术 第四章:点击流分析的奇妙世界:实际的解决方案 到开始实际工作的时候了.哦耶! 在本章中,您将了解到一些最重要的网络分析报告,我将 ...
- 精通Web Analytics 2.0 (5) 第三章:点击流分析的奇妙世界:指标
精通Web Analytics 2.0 : 用户中心科学与在线统计艺术 第三章:点击流分析的奇妙世界:指标 新的Web Analytics 2.0心态:搞定它.新的闪亮系列工具:是的.准备好了吗?当然 ...
- 基于Qt的信号分析简单应用软件的设计
一.需求描述: 1.读取data.asc文件,分析其连续性: 2.绘制信号图像,并保存. 二.UI界面组成: 该应用的UI由以下几个控件组成: 3个PushButton:打开文件.图像保存.退出: 1 ...
- VTC Fsync_out信号分析
VTC Fsync_out信号分析 1.GUI配置 Vertical position的值289是根据Frame/Field 0 Vertical settings一栏中sync start来设置的. ...
- 信号分析——从傅里叶变化到FFT
我们眼中的世界就像皮影戏的大幕布,幕布的后面有无数的齿轮,大齿轮带动小齿轮,小齿轮再带动更小的. 在最外面的小齿轮上有一个小人——那就是我们自己. 我们只看到这个小人毫无规律的在幕布前表演,却无法预测 ...
- Qt: qobject_cast<QPushButton*>(sender()) 简化信号与槽的编写
当你觉得写代码是一件重复性极高的工作时,这时你就应该考虑换个方式来实现了. 提高代码效率,减少代码量. 代码片: void Widget::onClicked() { QPushButton* but ...
- qobject_cast<QPushButton*>(sender()) 简化信号与槽的编写(sender()取得发信号的对象后,就取得了它的全部信息,为所欲为)
当你觉得写代码是一件重复性极高的工作时,这时你就应该考虑换个方式来实现了. 提高代码效率,减少代码量. 代码片: void Widget::onClicked() { QPushButton* but ...
- ListView的HeaderView包含的GridView滑动隐藏后无法点击问题分析
目录 1 现象 2 问题分析 2.1 滑动前 2.2 滑动后 2.3 mDataChanged赋值为true的位置 2.3 GridView直接作为ListView的HeaderView为什么可以滑动 ...
随机推荐
- windows共享连接显示无法打开
Ping目标地址和名称可以连通,但是访问告知无法打开或找到名称,看凭据设置正常,重启无效. 判断:可能是由于凭据过期引起,更新凭据,重启,仍旧无效. 修改IP地址进行访问,成功打开. 清理网络连接状态 ...
- 6. H.264/AVC编码器原理
1. H.264/AVC的应用 H.264 不仅具有优异的压缩性能,而且具有良好的网络亲和性,这对实时的视频通信是十分重要的.和 MPEG-4 中的重点是灵活性不同,H.264 着重在压缩的高效率和传 ...
- 如何用keytool导入证书
先用cmd定位到 jre\lib目录下的security文件夹 例如 C:\Program Files\Java\jre1.8.0_191\lib\security 运行cmd,导入证书 keyt ...
- failed to open stream: No such file or directory 报错解决方法
1.首先检查是否是文件名错误(比如有空格):是否因为路径不完整(比如缺少http://,或者缺少文件扩展名.doc等): 2.若是在本地中文名文件打开报错,我就是因为编码不一致导致: Windows中 ...
- git命令用法
git svn 说明 git pull svn update git add 要提交的文件名 svn add git rm svn rm,del git commit -m '备注一下提 ...
- css的优先级和权重问题 以及!important优先级
一,前言: 刚加的css怎么没有渲染出来?浏览器中查看,发现是被其他的css给覆盖了,相信我们都曾遇到过这样的问题.那么浏览器是如何选择css标签的渲染顺序的呢?换句话说,css选择器的优先级是怎么规 ...
- 什么是展uv
uvw是对应三维模型x.y.z坐标,就像模型的皮肤一样,为了便于绘制贴图,需要将UV尽量展平 展UV就是把你建好的模型展开成平面,别人就可以在那平面上做材质,皮肤等,这些东西.例如展一个正方体的UV, ...
- [转]NDK编译库运行时报dlopen failed: cannot locate symbol "__exidx_end" 解决办法
原文链接:http://blog.csdn.net/acm2008/article/details/41040015 当用NDK编译的库在运行加载时报如下错: dlopen("/data/d ...
- Linux ftp Command
一.ftp的get命令和mget命令有何不同? get一次只下载一个文件:mget一次可以下载多个文件,而且支持通配符,需要注意的是在mget的时侯,需要对每一个文件都选择y/n,如果想不交互的下载全 ...
- JSON_UNESCAPED_UNICODE
JSON_UNESCAPED_UNICODE(中文不转为unicode)