我們可以把qt的事件傳遞看成鏈狀:如果子類沒有處理這個事件,就會繼續向其父類傳遞
1.新建乙個mybutton類,將其基類改為qpushbutton.
2.在ui中新建乙個push button控制項,並將其提公升為mybutton.
3.在mybutton.h中增加滑鼠按下事件.
#ifndef mybutton_h
#define mybutton_h
#include
#include
class
mybutton
:public qpushbutton
;#endif
// mybutton_h
4.在mybutton.cpp中實現滑鼠按下事件.
注意觀察有和沒有else時的執行結果!!
void mybutton::
mousepressevent
(qmouseevent *ev)
else
//注意觀察有和沒有else時的執行結果!!
可見,這個名字為pushbutton的控制項的父元件是mywidget,父類是mybutton.
所以執行ev->ignore();
後事件會繼續傳遞,傳遞給父元件,不是父類!!
可以進行如下驗證:
在mywidget.h中增加乙個滑鼠按下事件:
class
mywidget
:public qwidget
;
在mywidget.cpp中
void mywidget::
mousepressevent
(qmouseevent *ev)
在mybutton.cpp中
void mybutton::
mousepressevent
(qmouseevent *ev)
else
}
執行結果:
這就說明了執行ev->ignore();
後事件會繼續傳遞給父元件,不是父類!
事實上,我們很少使用accept()和ignore()函式,而是像上面的示例一樣,如果希望忽略事件,只要呼叫父類的響應函式即可。qt中的事件大部分是protected的,因此,重寫的函式必定存在著其父類中的響應函式,這個方法是可行的。
而accept()和ignore()函式的正確用法是用在重寫closeevent函式中。見示例:
這個事件所在的操作就是關閉視窗。因此,一旦接受事件,視窗就會被關閉;否則視窗繼續保留。
Qt事件的接收和忽略
qt的事件是依次分發的,一般由系統自動處理。如果我們需要手動處理事件,需要重寫相關的事件函式。在重寫函式中,處理完我們所需的操作之後,有兩種選擇,一種是讓事件繼續傳遞,即忽略該事件,另一種是 不讓該事件繼續傳遞即接收該事件。下面是簡單的示例 void mypushbutton mousepresse...
19黑馬QT筆記之事件的接收和忽略
1 概念 1 事件的接收 事件被接收後,不會往後傳遞,導致也不會觸發該事件的相應訊號。例如滑鼠按下事件,當使用者按下滑鼠觸發事件,產生乙個事件物件。你重寫了該按鈕的mousepressevent事件處理函式,接收了該物件並人為的不再往下傳遞,事件物件沒了就不會再觸發按鈕的訊號,也就不會觸發該訊號的槽...
Qt c 事件,以及事件的接收和忽略
實驗環境 linux mint 下qt5.11 其實我們談及qt程式設計,第乙個想起的無外乎訊號和槽,訊號就是通過某一控制項的動作 例如按鈕的按下和抬起 讓接收訊號的微件有所響應 呼叫標準或自定義函式 槽 而事件,為響應微件事件作出函式處理增加了更多的可能。自定義微件大多繼承自qwidget,而wi...