Qt 事件的接收和忽略

2021-10-04 03:07:47 字數 1916 閱讀 2966

我們可以把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...