QPushButton 点击信号分析
2024-08-21 21:40:45
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最后执行,相当于弹起操作
最新文章
- javascript设计模式-策略模式
- HTML-学习笔记(1)
- 【Java 基础篇】【第六课】接口interface
- 【转】IOS图像拉伸解决方案
- ios7.1 在线安装 失败的解决办法
- mongo中查询Array类型的字段中元素个数
- Get和Post的参数传值
- ICOMOON!强悍的WEB字体图标制造器/Web字体使用实例
- Objective-C实现变参函数
- bat文件的一些小技巧
- 关于li标签之间的间隔如何消除!
- Max Sum of Max-K-sub-sequence hdu3415
- 对thinkphp的命名空间的理解
- npm管理工具介绍
- 论文阅读笔记二十八:You Only Look Once: Unified,Real-Time Object Detection(YOLO v1 CVPR2015)
- [转帖]DevOps/TestOps概念
- NN中BP推导及w不能初始化为0
- ASP.NET Core MVC 模型绑定 (转载)
- Scala--数组相关操作
- deeplearning.ai学习RNN