QT進階之路 : QEvent詳解

轉載自:https://www.2cto.com/kf/201610/558849.html

簡述

QEvent 類是所有事件類的基類,事件對象包含事件參數。

Qt 的主事件循環(QCoreApplication::exec())從事件隊列中獲取本地窗口系統事件,將它們轉化為 QEvents,然後將轉換後的事件發送給 QObjects。

一般來說,事件來自底層窗口系統(spontaneous() 返回 true),但也可以使用 QCoreApplication::sendEvent() 和 QCoreApplication::postEvent()(spontaneous() 返回 false)來手動發送事件。

QObjects 通過調用它們的 QObject::event() 函數接收事件。該函數可以在子類中重新實現,來處理自定義的事件以及添加額外的事件類型,QWidget::event() 就是一個很著名的例子。默認情況下,像 QObject::timerEvent() 和 QWidget::mouseMoveEvent() 這樣的事件可以被髮送給事件處理函數。QObject::installEventFilter() 允許一個對象攔截髮往另一個對象的事件。

基本的 QEvent 只包含了一個事件類型參數。QEvent 的子類包含了額外的描述特定事件的參數。

成員類型

枚舉QEvent::Type:

這個枚舉類型定義了Qt中有效的事件類型。事件類型和每個類型的專門類如下:

QT進階之路 : QEvent詳解

QT進階之路 : QEvent詳解

QT進階之路 : QEvent詳解

QT進階之路 : QEvent詳解

QT進階之路 : QEvent詳解

用戶事件的值應該介於 User 和 MaxUser 之間。

常量值描述QEvent::User1000用戶定義的事件QEvent::MaxUser65535最後的用戶事件 ID

為方便起見,可以使用 registerEventType() 函數來註冊和存儲一個自定義事件類型,這樣做會避免意外地重用一個自定義事件類型。

屬性文檔

accepted : bool

設置 accept 標誌意味著接收器需要該事件,不需要的事件可能會被傳遞給它的父窗口。默認情況下,isAccepted() 設置為 true。不能依賴於此,因為子類可能會在子類構造器中清除該標誌。

出於簡便考慮,accept 標誌可以通過 accept() 設置,ignore() 清除。

訪問函數:

bool isAccepted() const void setAccepted(bool accepted)

成員函數文檔

void QEvent::accept()

設置事件對象的 accept 標誌,等價於 setAccepted(true)。

設置 accept 標誌意味著接收器需要該事件,不需要的事件可能會被傳遞給它的父窗口。

void QEvent::ignore()

清除事件對象的 accept 標誌,等價於 setAccepted(false)。

清除 accept 標誌意味著事件接收器不需要該事件,不需要的事件可能會被傳遞給它的父窗口。

[static] int QEvent::registerEventType(int hint = -1)

註冊並返回一個自定義事件類型。如果 hint 是合法的,則會返回這個值;否則,會返回介於 QEvent::User 和 QEvent::MaxUser 之間的一個尚未被註冊的值。如果其值不在 QEvent::User 和 QEvent::MaxUser 之間,hint 值將被忽略。

如果可用的值被使用或程序關閉,將返回 -1。該函數是線程安全的。

bool QEvent::spontaneous() const

如果事件由應用程序之外產生的,比如一個系統事件,返回 true,否則返回 false。

對於繪製事件,該函數的返回值是未定義的。

Type QEvent::type() const

返回事件的類型


分享到:


相關文章: