19黑馬QT筆記之事件的接收和忽略

2021-10-05 11:52:13 字數 1816 閱讀 3977

1 概念:

1)事件的接收:事件被接收後,不會往後傳遞,導致也不會觸發該事件的相應訊號。例如滑鼠按下事件,當使用者按下滑鼠觸發事件,產生乙個事件物件。你重寫了該按鈕的mousepressevent事件處理函式,接收了該物件並人為的不再往下傳遞,事件物件沒了就不會再觸發按鈕的訊號,也就不會觸發該訊號的槽函式。

2)事件的忽略:不對不想要的事件處理,使它繼續往下傳遞。

注:事件的接收和忽略是人為控制的。(前提是你重寫了相應事件處理函式)

2 例子:

同樣的,我們建立完帶ui的視窗後,繼續新增類自定義控制項按鈕,記住提公升。

**:建議先看自定義控制項類的標頭檔案、cpp檔案和視窗的connect函式,它們測試了事件被提前處理,沒有繼續往下傳遞觸發相應的訊號;然後再看視窗的closeevent函式,該處理事件函式是主要使用accept()和ignore()的地方。

注釋裡面已經說得很詳細了。

專案、主函式和ui沒必要給。專案加config+=c++11,ui只有乙個自定義按鈕。

1)自定義按鈕標頭檔案:

#ifndef mybutton_h

#define mybutton_h

#include

#include

#include

#include

class

mybutton

:public qpushbutton

;#endif

// mybutton_h

2)自定義按鈕.cpp檔案:

#include

"mybutton.h"

mybutton::

mybutton

(qwidget *parent)

:qpushbutton

(parent)

//重寫滑鼠按下事件

void mybutton::

mousepressevent

(qmouseevent *e)

//事件的忽略-----否則其他事件被忽略 即不作自定義處理 交給父類做預設處理

else

//若你自己處理了還想繼續傳遞事件觸發訊號 則將上面else的語句寫在外面即可 意思讓它繼續傳遞事件 一般使用這種避免訊號不能觸發

//qpushbutton::mousepressevent(e);

}

3)視窗標頭檔案:

#ifndef mywidget_h

#define mywidget_h

#include

namespace ui

class

mywidget

:public qwidget

;#endif

// mywidget_h

4)視窗.cpp檔案:

#include

"mywidget.h"

#include

"ui_mywidget.h"

#include

#include

mywidget::

mywidget

(qwidget *parent)

:qwidget

(parent),ui

(new ui::mywidget));

}mywidget::

~mywidget()

//重寫視窗關閉處理事件函式

void mywidget::

closeevent

(qcloseevent *event)

else

}

Qt事件的接收和忽略

qt的事件是依次分發的,一般由系統自動處理。如果我們需要手動處理事件,需要重寫相關的事件函式。在重寫函式中,處理完我們所需的操作之後,有兩種選擇,一種是讓事件繼續傳遞,即忽略該事件,另一種是 不讓該事件繼續傳遞即接收該事件。下面是簡單的示例 void mypushbutton mousepresse...

Qt 事件的接收和忽略

我們可以把qt的事件傳遞看成鏈狀 如果子類沒有處理這個事件,就會繼續向其父類傳遞 1.新建乙個mybutton類,將其基類改為qpushbutton.2.在ui中新建乙個push button控制項,並將其提公升為mybutton.3.在mybutton.h中增加滑鼠按下事件.ifndef mybu...

Qt c 事件,以及事件的接收和忽略

實驗環境 linux mint 下qt5.11 其實我們談及qt程式設計,第乙個想起的無外乎訊號和槽,訊號就是通過某一控制項的動作 例如按鈕的按下和抬起 讓接收訊號的微件有所響應 呼叫標準或自定義函式 槽 而事件,為響應微件事件作出函式處理增加了更多的可能。自定義微件大多繼承自qwidget,而wi...