QPushButton 点击信号分析

QPushButton有三个很重要的信号跟点击有关

  • pressed
  • clicked
  • toggled

表面上看,pressed和clicked都会在点击按钮时触发,它们有什么区别呢?toggled好像有时候触发,有时候不触发,到底怎么回事呢?下面就一起聊一下这三个信号

首先,这三个信号都是从QAbstractButton继承来的,也就是说,下面情况对QAbstractButton的所有子类都适用,

  1. 先来看第一个问题

    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”,这种情况跟我们在鼠标按下事件和鼠标弹起事件中同时打断点的情况一样,调试按下触发的代码后,弹起的事件代码不会触发。

  2. 再来看第二个问题

    帮助文档里面写着按钮状态变化的时候,这个信号会触发,所以这个信号触发的前提是按钮的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
...

结论:

  1. pressed最先执行,相当于按下操作
  2. 按下之后,按钮状态发生变化,触发toggled
  3. clicked最后执行,相当于弹起操作

最新文章

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

热门文章

  1. mediawiki的安装
  2. Window虚拟内存管理(转)
  3. Mysql Replication 主从同步
  4. kubenetes dns
  5. js原型和原型链[转]
  6. 如何申请新浪SAE,发布自己的网站
  7. ansible介绍与安装
  8. Qt5.7学习
  9. Luogu 4725 【模板】多项式对数函数
  10. Python守护进程(多线程开发)-乾颐堂