QAbstractButton的clicked(bool)和toggled(bool)之间的区别

QPushButtonQToolButton都继承于QAbstractButton,它们都有clicked(bool)toggled(bool)这两个信号函数。


这两个信号最大的区别就是在对应的槽函数中调用按钮的setCheck(bool )函数所产生的区别。前者不会触发信号,后者会再次触发信号。

情况一:如果是最初选择的是clicked(bool)信号,那么在对应的槽中调用按钮指针的setCheck(bool)的时候,并不会触发clicked(bool)这个信号。比如我在槽函数中将按钮设置为setCheck(true),那么下次再单击这个按钮的时候,checked就等于true了,类似的设置成setCheck(false),再单击按钮则携带的参数checked就等于false。实际应用中我们在使用Qt设计师的时候,选中部件右键并转到槽就首先需要选择哪个信号函数。

情况二:然后,如果最初选择的是toggled(bool)信号,那么在槽函数中调用按钮的setCheck(bool)函数的时候,会再次触发toggled(bool)信号。比如,我在槽函数中设置成 toolButton->setCheck(false);那么这个按钮会再次触发信号,所以就会马上再次进入这个槽函数,并且这次所携带checked参数的值就是你刚才设置的false,这是我们看不到的,只有自己用代码deBug才会显示出来,所以就导致下次单击这个按钮的时候,对应的槽函数中的checked的值就变成了true,因为checkable属性就是为了给按钮一个选中状态,所以每次点击都会在选中和不选中两者之间进行切换。给人使用上感受到的区别就是,使用toggled(bool)就相当于换向了,而使用clicked(bool)就没有换向,你设置成啥样,那么下次点击的时候就是啥样。

总而言之,在不同信号对应的槽函数中调用按钮的setCheck()函数的时候要注意它背后的机制,你希望按钮下次的checked属性到底是什么,了解到上面的机制后就可以灵活地控制。这些东西在Qt的帮助文档中都有,这儿只是记录下来。

  • 3
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值