Qt控件之toggle()、triggered()、clicked()——triggered发射信号无响应
文章目录
0 背景
1 toggle()、triggered()、clicked()区别
0 背景
写这篇博文的背景是因为在写一个控件QAction事件时,发射bool信号后,槽函数一直收不到信号,导致事件一直无法相应。一直在检查是不是代码逻辑出问题了,结果最后才发现是Checkable没有设置为true,导致bool参数一直没有传入。
1 toggle()、triggered()、clicked()区别
这三个信号都是按钮点击后发射的信号,区别在于:
clicked()用于Button发射的信号
triggered()用于QAction发射的信号,原型:void triggered(bool checked = false);
toggle()用于ChekBox,非开即关,原型:void toggled(bool);
原文链接:https://blog.csdn.net/qq_33375598/article/details/112071849
==========================
QPushButton和QToolButton都继承于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的帮助文档中都有,这儿只是记录下来。
————————————————
原文链接:https://blog.csdn.net/Topdandan/article/details/89158409
qt中clicked(bool checked)和toggled(bool checked)的区别
原文链接:https://blog.csdn.net/huangyibo007/article/details/104544269
qt文档的解释