Qt Qt中的事件處理

2021-09-27 05:28:53 字數 2947 閱讀 5054

a.圖形介面應用程式的訊息處理模型

b.qt平台將系統產生的訊息轉換為qt事件

1.qt事件是乙個qevent的物件

2.qt事件用於描述程式內部或外部發生的動作

3.任意的qobject物件都具備事件處理的能力

c.gui應用程式的事件處理方式

1.qt事件產生後立即被分到qwidget物件

2.qwidget中的event(qevent)進行事件處理

3.event()根據事件型別呼叫不同的事件處理函式

4.在事件處理函式中傳送qt預定義的訊號

5.呼叫訊號關聯的槽函式

場景分析

qpushbutton事件處理分析

1.接收到滑鼠事件

2.呼叫event(qevent)成員函式

3.呼叫mousereleaseevent(qmouseevent*)成員函式

4.呼叫click()成員函式

5.觸發signal(clicked())

**示例--自定義事件

qmypushbutton.cpp

#include "qmypushbutton.h"

#include qmypushbutton::qmypushbutton(qwidget* parent, qbuttonlistener* listener) : qpushbutton(parent)

void qmypushbutton::mousereleaseevent(qmouseevent *e)

else

}qmypushbutton.h

#ifndef qmypushbutton_h

#define qmypushbutton_h

#include typedef void (qbuttonlistener)(qobject*, qmouseevent*);

class qmypushbutton : public qpushbutton

;#endif // qmypushbutton_h

widget.cpp

#ifndef qmypushbutton_h

#define qmypushbutton_h

#include typedef void (qbuttonlistener)(qobject*, qmouseevent*);

class qmypushbutton : public qpushbutton

;#endif // qmypushbutton_h

widget.h

#ifndef qmypushbutton_h

#define qmypushbutton_h

#include typedef void (qbuttonlistener)(qobject*, qmouseevent*);

class qmypushbutton : public qpushbutton

;#endif // qmypushbutton_h

執行的結果以及按鈕釋放時的列印結果如圖所示

d.事件和訊號不同

1.事件由具體物件進行處理

2.訊號由具體物件主動產生

3.改寫事件處理函式可能導致程式行為發生改變

4.訊號是否存在對應的槽函式不會改變程式行為

5.一般而言,訊號在具體的事件處理函式中產生

e.事件的傳遞過程

qevent中的關鍵成員函式

1.void ignore()--接收者忽略當前事件,事件可能傳遞給父元件

2.void accept()--接收者期望處理當前事件

3.bool isaccepted()--判斷當前事件是否被處理

**生成的結果執行如圖所示

f.qt中的事件過濾

1.事件過濾器可以對其他元件接收到的事件進行監控

2.任意的qobject物件都可以作為事件過濾器使用

3.事件過濾器物件需要重寫eventfilter()函式

元件通過installeventfilter()函式安裝事件過濾器

1.事件過濾器在元件之前接收到事件

2.事件過濾器能夠決定是否將事件**到元件物件

基本的**實現

小結1.qt事件和訊號不同

2.事件由qobject的物件進行處理

3.訊號由qobject物件觸發

4.重寫事件處理函式可能該變程式行為

5.訊號的觸發不會對程式行為造成影響

6.事件處理實在實際工程開發中的應用非常普遍

C 中的事件和事件處理

c 中的事件,我覺得和mfc的訊息作用在某些方面是差不多的。這個專案中用到的需求是兩個類之間的資料互動,首先肯定是分為乙個觸發事件的類,乙個處理事件的類。1 首先需要在所有類的外部為事件定義乙個公共訪問型別的 該 為多重 所以 定義方法標識的返回為void型別。一般我們這麼定義 public voi...

C 中的事件處理

萬物皆物件!物件與物件之間不僅僅是存在關係,更是具有千絲萬縷的聯絡。關於物件之間的關係,我們在 sql server 中已經討論過。本文要討論的是它們之間存在的聯絡,即 如何使得乙個物件發生變化時,另乙個物件也能隨之發生變化。這種 乙個物件的狀態改變導致其它物件狀態改變 的現象,我們稱之為事件。在檢...

iOS 中的事件處理

基礎理論 1 在ios 中 不是任何物件都能處理事件的,只有繼承uiresponder的物件才能接受並處理事件,我們稱之為響應者物件 2 uiresponder當中存在下列四個api 觸控開始時呼叫 void touchesbegan nsset touches withevent nullable...