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...