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

2022-02-03 03:14:25 字數 1712 閱讀 6739

實驗環境:linux mint 下qt5.11

其實我們談及qt程式設計,第乙個想起的無外乎訊號和槽,訊號就是通過某一控制項的動作(例如按鈕的按下和抬起)讓接收訊號的微件有所響應(呼叫標準或自定義函式----槽)。

而事件,為響應微件事件作出函式處理增加了更多的可能。

自定義微件大多繼承自qwidget,而widget又繼承自qobject,這樣的繼承關係,允許了微件能重寫(多型實現)很多事件,下圖顯示了qwidget和qobject用到的一些protected function

qwidget  保護成員函式

qobject保護成員函式---可見timerevent計時器事件

由於建了乙個mainwindow,所以定時器採用的是starttimer
標頭檔案

#ifndef mainwindow_h

#define mainwindow_h#include

#include

#include

namespace

ui class mainwindow : public

qmainwindow

;#endif

//mainwindow_h

具體實現:

#include "

mainwindow.h

"#include

"ui_mainwindow.h

"#include

#include

#include

#include

#include

"mybtn.h

"mainwindow::mainwindow(qwidget *parent) :

qmainwindow(parent),

ui(newui::mainwindow)

);

//qdebug()

timerid=this->starttimer(1000

); timerid1=this->starttimer(1000);}

void mainwindow::mousepressevent(qmouseevent *qt)

void mainwindow::timerevent(qtimerevent *qtimer)

}else //計時器ii timerid1

}mainwindow::~mainwindow()

大致執行效果:插圖:法國超級軍旗艦載戰鬥機,配備「飛魚」反艦飛彈

然而對於事件我們可以加以干預,執行的**(事件)可以選擇忽略ignore()(訊號將傳至元件所在的父元件,或者接收accept(),訊號不再繼續往下傳)
**例項:

Qt事件的接收和忽略

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

Qt 事件的接收和忽略

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

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

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