Qt——【若按钮点击后无反应,可以勾选或设置Checkable属性】UI界面的QPushButton的树视图中勾选Checkable属性(clicked和toggled事件比较)

【Qt5.8+Windows+QtCreator】

注意:写好了按钮的信号与槽机制代码,当你点击QPushButton按钮时,发现按钮没有反应(Click或toggle触发事件),就可以勾选“树视图的Checkable属性  或者  在构造函数里,给对应控件setCheckable(true)”。 

 

我在UI界面有六个控件,都做了这样的操作“按下”按钮可变按钮文本(PS:Checkable是设置按钮"能否选中",不是"是否已选中"!!!)

Open:触发clicked事件,在UI视图中未勾选Checkable属性

HighSpeed:触发clicked事件,在UI视图中未勾选Checkable属性,但是在槽函数中:ui->btHigh->setCheckable(true);

CBI:触发clicked事件,在UI视图中勾选Checkable属性

TurnOn:触发toggled事件,在UI视图中未勾选Checkable属性

Auto:触发toggled事件,在UI视图中未勾选Checkable属性,但是在槽函数中:ui->btAuto->setCheckable(true);

Light+:触发toggled事件,在UI视图中勾选Checkable属性

测试:

Open:按钮被按下,发现按钮会跟着鼠标动作变色:按下从灰色变淡蓝色,放开从淡蓝色渐变回灰色;按钮文本没有改变;按钮无论按多少下,bool值是false。

HighSpeed:按钮被按一次,发现按钮变淡蓝色,bool值是true;再按一次,按钮变回灰色,bool值是false;按的两次,按钮文本都改变了。

CBI:按钮被按一次,发现按钮变淡蓝色,bool值是true;再按一次,按钮变回灰色,bool值是false;按的两次,按钮文本都改变了。

TurnOn:按钮被按下,发现按钮会跟着鼠标动作变色:按下从灰色变淡蓝色,放开从淡蓝色渐变回灰色;按钮文本没有改变;按钮无论按多少下,都无法触发clicked事件,所以不知道bool值是什么。

Auto:按钮被按下,发现按钮会跟着鼠标动作变色:按下从灰色变淡蓝色,放开从淡蓝色渐变回灰色;按钮文本没有改变;按钮无论按多少下,都无法触发clicked事件,所以进入不了槽函数,设置Checkable为true,且不知道bool值是什么。

Light+:按钮被按一次,发现按钮变淡蓝色,bool值是true;再按一次,按钮变回灰色,bool值是false;按的两次,按钮文本都改变了。

总结:

在UI界面窗口的树视图或者下拉按钮视图中,找到QAbstractButton类,选中checkable属性。

没有选中checkable属性,也可以触发clicked事件,但是clicked事件的bool值要有改变,有两种方式:
        一:勾选视图的checkable属性,二:添加这行代码ui->btAddLight->setCheckable(true);

没有选中checkable属性,就不可以触发toggled事件!所以这行代码ui->btAddLight->setCheckable(true);对 “连接toggled事件的槽函数”是无用的!------》触发QPushButton的toggled事件,就要选中checkable属性!

选中checkable属性,除了触发toggled事件,还可以有明显的颜色变化,按一下从灰色变淡蓝色,再按一下才从淡蓝色渐变回灰色;无论能不能触发事件,只要选中了checkable属性,就一定有这样的颜色变化!

---------------------------------------------------------------------------------------------------------------

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

--------------------------------------------------------------------------------------------------------------

toggled要比clicked更容易触发。clicked()有的toggled有,而toggled有的,clicked()却不一定有!
toggle(切换) 类似开关。 具有2个状态,打开/关闭。使用这个信号,是在这2个状态之间切换。QPushButton类的按钮和QRadioButton类的单选框可调用。
trigger(触发)是一次性的。 点击后,无法改变状态。 要么是打开,要么是关闭。一般按钮和QAction类的按钮都可调用(QPushButton按钮按下并没有触发该事件)。

参考: QPushButton 实现保持按下效果QPushButton 点击信号分析QT 信号toggled triggered区别qt中clicked()和toggled()的区别

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章