轉載自: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中有效的事件類型。事件類型和每個類型的專門類如下:
用戶事件的值應該介於 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
返回事件的類型
閱讀更多 技術小白學習之路 的文章