zoukankan      html  css  js  c++  java
  • QPushButton 点击信号分析

    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最后执行,相当于弹起操作
  • 相关阅读:
    ASP.NET HttpRuntime.Cache缓存类使用总结
    ASP.NET MVC自定义AuthorizeAttribute篇知识点讲解—登录限制
    Echarts图表控件使用总结2(Line,Bar)—问题篇
    数据库查询实例(包含所有where条件例子)
    php file_get_contents读取大容量文件方法
    如何给mysql用户分配权限
    dedecms {dede:php}标签用法介绍
    js获取字符串最后一个字符代码
    CSS3选择器之学习笔记
    SQL中实现SPLIT函数几种方法
  • 原文地址:https://www.cnblogs.com/huqi-code/p/8350009.html
Copyright © 2011-2022 走看看