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()的區別

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