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的帮助文档中都有,这儿只是记录下来。

你可能感兴趣的:(Qt)