Qt之QEvent
簡(jiǎn)述
QEvent 類是所有事件類的基類,事件對(duì)象包含事件參數(shù)。
Qt 的主事件循環(huán)(QCoreApplication::exec())從事件隊(duì)列中獲取本地窗口系統(tǒng)事件,將它們轉(zhuǎn)化為 QEvents,然后將轉(zhuǎn)換后的事件發(fā)送給 QObjects。
一般來說,事件來自底層窗口系統(tǒng)(spontaneous() 返回 true),但也可以使用 QCoreApplication::sendEvent() 和 QCoreApplication::postEvent()(spontaneous() 返回 false)來手動(dòng)發(fā)送事件。
QObjects 通過調(diào)用它們的 QObject::event() 函數(shù)接收事件。該函數(shù)可以在子類中重新實(shí)現(xiàn),來處理自定義的事件以及添加額外的事件類型,QWidget::event() 就是一個(gè)很著名的例子。默認(rèn)情況下,像 QObject::timerEvent() 和 QWidget::mouseMoveEvent() 這樣的事件可以被發(fā)送給事件處理函數(shù)。QObject::installEventFilter() 允許一個(gè)對(duì)象攔截發(fā)往另一個(gè)對(duì)象的事件。
基本的 QEvent 只包含了一個(gè)事件類型參數(shù)。QEvent 的子類包含了額外的描述特定事件的參數(shù)。
成員類型
枚舉QEvent::Type:
這個(gè)枚舉類型定義了Qt中有效的事件類型。事件類型和每個(gè)類型的專門類如下:
| QEvent::None | 0 | 不是一個(gè)事件 |
| QEvent::ActionAdded | 114 | 一個(gè)新 action 被添加(QActionEvent) |
| QEvent::ActionChanged | 113 | 一個(gè) action 被改變(QActionEvent) |
| QEvent::ActionRemoved | 115 | 一個(gè) action 被移除(QActionEvent) |
| QEvent::ActivationChange | 99 | Widget 的頂層窗口激活狀態(tài)發(fā)生了變化 |
| QEvent::ApplicationActivate | 121 | 這個(gè)枚舉已被棄用,使用 ApplicationStateChange 代替 |
| QEvent::ApplicationActivated | ApplicationActivate | 這個(gè)枚舉已被棄用,使用 ApplicationStateChange 代替 |
| QEvent::ApplicationDeactivate | 122 | 這個(gè)枚舉已被棄用,使用 ApplicationStateChange 代替 |
| QEvent::ApplicationFontChange | 36 | 應(yīng)用程序的默認(rèn)字體發(fā)生了變化 |
| QEvent::ApplicationLayoutDirectionChange | 37 | 應(yīng)用程序的默認(rèn)布局方向發(fā)生了變化 |
| QEvent::ApplicationPaletteChange | 38 | 應(yīng)用程序的默認(rèn)調(diào)色板發(fā)生了變化 |
| QEvent::ApplicationStateChange | 214 | 應(yīng)用程序的狀態(tài)發(fā)生了變化 |
| QEvent::ApplicationWindowIconChange | 35 | 應(yīng)用程序的圖標(biāo)發(fā)生了變化 |
| QEvent::ChildAdded | 68 | 一個(gè)對(duì)象獲得孩子(QChildEvent) |
| QEvent::ChildPolished | 69 | 一個(gè)部件的孩子被拋光(QChildEvent) |
| QEvent::ChildRemoved | 71 | 一個(gè)對(duì)象時(shí)區(qū)孩子(QChildEvent) |
| QEvent::Clipboard | 40 | 剪貼板的內(nèi)容發(fā)生改變 |
| QEvent::Close | 19 | Widget 被關(guān)閉(QCloseEvent) |
| QEvent::CloseSoftwareInputPanel | 200 | 一個(gè)部件要關(guān)閉軟件輸入面板(SIP) |
| QEvent::ContentsRectChange | 178 | 部件內(nèi)容區(qū)域的外邊距發(fā)生改變 |
| QEvent::ContextMenu | 82 | 上下文彈出菜單(QContextMenuEvent) |
| QEvent::CursorChange | 183 | 部件的鼠標(biāo)發(fā)生改變 |
| QEvent::DeferredDelete | 52 | 對(duì)象被清除后將被刪除(QDeferredDeleteEvent) |
| QEvent::DragEnter | 60 | 在拖放操作期間鼠標(biāo)進(jìn)入窗口部件(QDragEnterEvent) |
| QEvent::DragLeave | 62 | 在拖放操作期間鼠標(biāo)離開窗口部件(QDragLeaveEvent) |
| QEvent::DragMove | 61 | 拖放操作正在進(jìn)行(QDragMoveEvent) |
| QEvent::Drop | 63 | 拖放操作完成(QDropEvent) |
| QEvent::DynamicPropertyChange | 170 | 動(dòng)態(tài)屬性已添加、更改或從對(duì)象中刪除 |
| QEvent::EnabledChange | 98 | 部件的 enabled 狀態(tài)已更改 |
| QEvent::Enter | 10 | 鼠標(biāo)進(jìn)入部件的邊界(QEnterEvent) |
| QEvent::EnterEditFocus | 150 | 編輯部件獲得焦點(diǎn)進(jìn)行編輯,必須定義 QT_KEYPAD_NAVIGATION |
| QEvent::EnterWhatsThisMode | 124 | 當(dāng)應(yīng)用程序進(jìn)入“What’s This?”模式,發(fā)送到 toplevel 頂層部件 |
| QEvent::Expose | 206 | 當(dāng)其屏幕上的內(nèi)容無效,發(fā)送到窗口,并需要從后臺(tái)存儲(chǔ)刷新 |
| QEvent::FileOpen | 116 | 文件打開請(qǐng)求(QFileOpenEvent) |
| QEvent::FocusIn | 8 | 部件或窗口獲得鍵盤焦點(diǎn)(QFocusEvent) |
| QEvent::FocusOut | 9 | 部件或窗口失去鍵盤焦點(diǎn)(QFocusEvent) |
| QEvent::FocusAboutToChange | 23 | 部件或窗口焦點(diǎn)即將改變(QFocusEvent) |
| QEvent::FontChange | 97 | 部件的字體發(fā)生改變 |
| QEvent::Gesture | 198 | 觸發(fā)了一個(gè)手勢(shì)(QGestureEvent) |
| QEvent::GestureOverride | 202 | 觸發(fā)了手勢(shì)覆蓋(QGestureEvent) |
| QEvent::GrabKeyboard | 188 | Item 獲得鍵盤抓取(僅限 QGraphicsItem) |
| QEvent::GrabMouse | 186 | 項(xiàng)目獲得鼠標(biāo)抓取(僅限 QGraphicsItem) |
| QEvent::GraphicsSceneContextMenu | 159 | 在圖形場(chǎng)景上的上下文彈出菜單(QGraphicsScene ContextMenuEvent) |
| QEvent::GraphicsSceneDragEnter | 164 | 在拖放操作期間,鼠標(biāo)進(jìn)入圖形場(chǎng)景(QGraphicsSceneDragDropEvent) |
| QEvent::GraphicsSceneDragLeave | 166 | 在拖放操作期間鼠標(biāo)離開圖形場(chǎng)景(QGraphicsSceneDragDropEvent) |
| QEvent::GraphicsSceneDragMove | 165 | 在場(chǎng)景上正在進(jìn)行拖放操作(QGraphicsSceneDragDropEvent) |
| QEvent::GraphicsSceneDrop | 167 | 在場(chǎng)景上完成拖放操作(QGraphicsSceneDragDropEvent) |
| QEvent::GraphicsSceneHelp | 163 | 用戶請(qǐng)求圖形場(chǎng)景的幫助(QHelpEvent) |
| QEvent::GraphicsSceneHoverEnter | 160 | 鼠標(biāo)進(jìn)入圖形場(chǎng)景中的懸停項(xiàng)(QGraphicsSceneHoverEvent) |
| QEvent::GraphicsSceneHoverLeave | 162 | 鼠標(biāo)離開圖形場(chǎng)景中一個(gè)懸停項(xiàng)(QGraphicsSceneHoverEvent) |
| QEvent::GraphicsSceneHoverMove | 161 | 鼠標(biāo)在圖形場(chǎng)景中的懸停項(xiàng)內(nèi)移動(dòng)(QGraphicsSceneHoverEvent) |
| QEvent::GraphicsSceneMouseDoubleClick | 158 | 鼠標(biāo)在圖形場(chǎng)景中再次按下(雙擊)(QGraphicsSceneMouseEvent) |
| QEvent::GraphicsSceneMouseMove | 155 | 鼠標(biāo)在圖形場(chǎng)景中移動(dòng)(QGraphicsSceneMouseEvent) |
| QEvent::GraphicsSceneMousePress | 156 | 鼠標(biāo)在圖形場(chǎng)景中按下(QGraphicsSceneMouseEvent) |
| QEvent::GraphicsSceneMouseRelease | 157 | 鼠標(biāo)在圖形場(chǎng)景中釋放(QGraphicsSceneMouseEvent) |
| QEvent::GraphicsSceneMove | 182 | 部件被移動(dòng)(QGraphicsSceneMoveEvent) |
| QEvent::GraphicsSceneResize | 181 | 部件已調(diào)整大小(QGraphicsSceneResizeEvent) |
| QEvent::GraphicsSceneWheel | 168 | 鼠標(biāo)滾輪在圖形場(chǎng)景中滾動(dòng)(QGraphicsSceneWheelEvent) |
| QEvent::Hide | 18 | 部件被隱藏(QHideEvent) |
| QEvent::HideToParent | 27 | 子部件被隱藏(QHideEvent) |
| QEvent::HoverEnter | 127 | 鼠標(biāo)進(jìn)入懸停部件(QHoverEvent) |
| QEvent::HoverLeave | 128 | 鼠標(biāo)留離開懸停部件(QHoverEvent) |
| QEvent::HoverMove | 129 | 鼠標(biāo)在懸停部件內(nèi)移動(dòng)(QHoverEvent) |
| QEvent::IconDrag | 96 | 窗口的主圖標(biāo)被拖走(QIconDragEvent) |
| QEvent::IconTextChange | 101 | 部件的圖標(biāo)文本發(fā)生改變(已棄用) |
| QEvent::InputMethod | 83 | 正在使用輸入法(QInputMethodEvent) |
| QEvent::InputMethodQuery | 207 | 輸入法查詢事件(QInputMethodQueryEvent) |
| QEvent::KeyboardLayoutChange | 169 | 鍵盤布局已更改 |
| QEvent::KeyPress | 6 | 鍵盤按下(QKeyEvent) |
| QEvent::KeyRelease | 7 | 鍵盤釋放(QKeyEvent) |
| QEvent::LanguageChange | 89 | 應(yīng)用程序翻譯發(fā)生改變 |
| QEvent::LayoutDirectionChange | 90 | 布局的方向發(fā)生改變 |
| QEvent::LayoutRequest | 76 | 部件的布局需要重做 |
| QEvent::Leave | 11 | 鼠標(biāo)離開部件的邊界 |
| QEvent::LeaveEditFocus | 151 | 編輯部件失去編輯的焦點(diǎn),必須定義 QT_KEYPAD_NAVIGATION |
| QEvent::LeaveWhatsThisMode | 125 | 當(dāng)應(yīng)用程序離開“What’s This?”模式,發(fā)送到頂層部件 |
| QEvent::LocaleChange | 88 | 系統(tǒng)區(qū)域設(shè)置發(fā)生改變 |
| QEvent::NonClientAreaMouseButtonDblClick | 176 | 鼠標(biāo)雙擊發(fā)生在客戶端區(qū)域外 |
| QEvent::NonClientAreaMouseButtonPress | 174 | 鼠標(biāo)按鈕按下發(fā)生在客戶端區(qū)域外 |
| QEvent::NonClientAreaMouseButtonRelease | 175 | 鼠標(biāo)按鈕釋放發(fā)生在客戶端區(qū)域外 |
| QEvent::NonClientAreaMouseMove | 173 | 鼠標(biāo)移動(dòng)發(fā)生在客戶區(qū)域外 |
| QEvent::MacSizeChange | 177 | 用戶更改了部件的大小(僅限 OS X) |
| QEvent::MetaCall | 43 | 通過 QMetaObject::invokeMethod() 調(diào)用異步方法 |
| QEvent::ModifiedChange | 102 | 部件修改狀態(tài)發(fā)生改變 |
| QEvent::MouseButtonDblClick | 4 | 鼠標(biāo)再次按下(QMouseEvent) |
| QEvent::MouseButtonPress | 2 | 鼠標(biāo)按下(QMouseEvent) |
| QEvent::MouseButtonRelease | 3 | 鼠標(biāo)釋放(QMouseEvent) |
| QEvent::MouseMove | 5 | 鼠標(biāo)移動(dòng)(QMouseEvent) |
| QEvent::MouseTrackingChange | 109 | 鼠標(biāo)跟蹤狀態(tài)發(fā)生改變 |
| QEvent::Move | 13 | 部件的位置發(fā)生改變(QMoveEvent) |
| QEvent::NativeGesture | 197 | 系統(tǒng)檢測(cè)到手勢(shì)(QNativeGestureEvent) |
| QEvent::OrientationChange | 208 | 屏幕方向發(fā)生改變(QScreenOrientationChangeEvent) |
| QEvent::Paint | 12 | 需要屏幕更新(QPaintEvent) |
| QEvent::PaletteChange | 39 | 部件的調(diào)色板發(fā)生改變 |
| QEvent::ParentAboutToChange | 131 | 部件的 parent 將要更改 |
| QEvent::ParentChange | 21 | 部件的 parent 發(fā)生改變 |
| QEvent::PlatformPanel | 212 | 請(qǐng)求一個(gè)特定于平臺(tái)的面板 |
| QEvent::PlatformSurface | 217 | 原生平臺(tái)表面已創(chuàng)建或即將被銷毀(QPlatformSurfaceEvent) |
| QEvent::Polish | 75 | 部件被拋光 |
| QEvent::PolishRequest | 74 | 部件應(yīng)該被拋光 |
| QEvent::QueryWhatsThis | 123 | 如果部件有“What’s This?”幫助,應(yīng)該接受事件 |
| QEvent::ReadOnlyChange | 106 | 部件的 read-only 狀態(tài)發(fā)生改變 |
| QEvent::RequestSoftwareInputPanel | 199 | 部件想要打開軟件輸入面板(SIP) |
| QEvent::Resize | 14 | 部件的大小發(fā)生改變(QResizeEvent) |
| QEvent::ScrollPrepare | 204 | 對(duì)象需要填充它的幾何信息(QScrollPrepareEvent) |
| QEvent::Scroll | 205 | 對(duì)象需要滾動(dòng)到提供的位置(QScrollEvent) |
| QEvent::Shortcut | 117 | 快捷鍵處理(QShortcutEvent) |
| QEvent::ShortcutOverride | 51 | 按下按鍵,用于覆蓋快捷鍵(QKeyEvent) |
| QEvent::Show | 17 | 部件顯示在屏幕上(QShowEvent) |
| QEvent::ShowToParent | 26 | 子部件被顯示 |
| QEvent::SockAct | 50 | Socket 激活,用于實(shí)現(xiàn) QSocketNotifier |
| QEvent::StateMachineSignal | 192 | 信號(hào)被傳遞到狀態(tài)機(jī)(QStateMachine::SignalEvent) |
| QEvent::StateMachineWrapped | 193 | 事件是一個(gè)包裝器,用于包含另一個(gè)事件(QStateMachine::WrappedEvent) |
| QEvent::StatusTip | 112 | 狀態(tài)提示請(qǐng)求(QStatusTipEvent) |
| QEvent::StyleChange | 100 | 部件的樣式發(fā)生改變 |
| QEvent::TabletMove | 87 | Wacom 寫字板移動(dòng)(QTabletEvent) |
| QEvent::TabletPress | 92 | Wacom 寫字板按下(QTabletEvent) |
| QEvent::TabletRelease | 93 | Wacom 寫字板釋放(QTabletEvent) |
| QEvent::OkRequest | 94 | Ok 按鈕在裝飾前被按下,僅支持 Windows CE |
| QEvent::TabletEnterProximity | 171 | Wacom 寫字板進(jìn)入接近事件(QTabletEvent),發(fā)送到 QApplication |
| QEvent::TabletLeaveProximity | 172 | Wacom 寫字板離開接近事件(QTabletEvent),發(fā)送到 QApplication |
| QEvent::ThreadChange | 22 | 對(duì)象被移動(dòng)到另一個(gè)線程。這是發(fā)送到此對(duì)象的最后一個(gè)事件在上一個(gè)線程中,參見:QObject::moveToThread() |
| QEvent::Timer | 1 | 定時(shí)器事件(QTimerEvent) |
| QEvent::ToolBarChange | 120 | 工具欄按鈕在 OS X 上進(jìn)行切換 |
| QEvent::ToolTip | 110 | 一個(gè) tooltip 請(qǐng)求(QHelpEvent) |
| QEvent::ToolTipChange | 184 | 部件的 tooltip 發(fā)生改變 |
| QEvent::TouchBegin | 194 | 觸摸屏或軌跡板事件序列的開始(QTouchEvent) |
| QEvent::TouchCancel | 209 | 取消觸摸事件序列(QTouchEvent) |
| QEvent::TouchEnd | 196 | 觸摸事件序列結(jié)束(QTouchEvent) |
| QEvent::TouchUpdate | 195 | 觸摸屏事件(QTouchEvent) |
| QEvent::UngrabKeyboard | 189 | Item 失去鍵盤抓取(QGraphicsItem) |
| QEvent::UngrabMouse | 187 | Item 失去鼠標(biāo)抓取(QGraphicsItem、QQuickItem) |
| QEvent::UpdateLater | 78 | 部件應(yīng)該排隊(duì)在以后重新繪制 |
| QEvent::UpdateRequest | 77 | 部件應(yīng)該被重繪 |
| QEvent::WhatsThis | 111 | 部件應(yīng)該顯示“What’s This”幫助(QHelpEvent) |
| QEvent::WhatsThisClicked | 118 | 部件的“What’s This”幫助鏈接被點(diǎn)擊 |
| QEvent::Wheel | 31 | 鼠標(biāo)滾輪滾動(dòng)(QWheelEvent) |
| QEvent::WinEventAct | 132 | 發(fā)生了 Windows 特定的激活事件 |
| QEvent::WindowActivate | 24 | 窗口已激活 |
| QEvent::WindowBlocked | 103 | 窗口被模態(tài)對(duì)話框阻塞 |
| QEvent::WindowDeactivate | 25 | 窗戶被停用 |
| QEvent::WindowIconChange | 34 | 窗口的圖標(biāo)發(fā)生改變 |
| QEvent::WindowStateChange | 105 | 窗口的狀態(tài)(最小化、最大化或全屏)發(fā)生改變(QWindowStateChangeEvent) |
| QEvent::WindowTitleChange | 33 | 窗口的標(biāo)題發(fā)生改變 |
| QEvent::WindowUnblocked | 104 | 一個(gè)模態(tài)對(duì)話框退出后,窗口將不被阻塞 |
| QEvent::WinIdChange | 203 | 本地窗口的系統(tǒng)標(biāo)識(shí)符發(fā)生改變 |
| QEvent::ZOrderChange | 126 | 部件的 z 值發(fā)生了改變,該事件不會(huì)發(fā)送給頂層窗口 |
用戶事件的值應(yīng)該介于 User 和 MaxUser 之間。
| QEvent::User | 1000 | 用戶定義的事件 |
| QEvent::MaxUser | 65535 | 最后的用戶事件 ID |
為方便起見,可以使用 registerEventType() 函數(shù)來注冊(cè)和存儲(chǔ)一個(gè)自定義事件類型,這樣做會(huì)避免意外地重用一個(gè)自定義事件類型。
屬性文檔
accepted : bool
設(shè)置 accept 標(biāo)志意味著接收器需要該事件,不需要的事件可能會(huì)被傳遞給它的父窗口。默認(rèn)情況下,isAccepted() 設(shè)置為 true。不能依賴于此,因?yàn)樽宇惪赡軙?huì)在子類構(gòu)造器中清除該標(biāo)志。
出于簡(jiǎn)便考慮,accept 標(biāo)志可以通過 accept() 設(shè)置,ignore() 清除。
訪問函數(shù):
- bool isAccepted() const
- void setAccepted(bool accepted)
成員函數(shù)文檔
-
void QEvent::accept()
設(shè)置事件對(duì)象的 accept 標(biāo)志,等價(jià)于 setAccepted(true)。設(shè)置 accept 標(biāo)志意味著接收器需要該事件,不需要的事件可能會(huì)被傳遞給它的父窗口。
-
void QEvent::ignore()
清除事件對(duì)象的 accept 標(biāo)志,等價(jià)于 setAccepted(false)。清除 accept 標(biāo)志意味著事件接收器不需要該事件,不需要的事件可能會(huì)被傳遞給它的父窗口。
-
[static] int QEvent::registerEventType(int hint = -1)
注冊(cè)并返回一個(gè)自定義事件類型。如果 hint 是合法的,則會(huì)返回這個(gè)值;否則,會(huì)返回介于 QEvent::User 和 QEvent::MaxUser 之間的一個(gè)尚未被注冊(cè)的值。如果其值不在 QEvent::User 和 QEvent::MaxUser 之間,hint 值將被忽略。如果可用的值被使用或程序關(guān)閉,將返回 -1。該函數(shù)是線程安全的。
-
bool QEvent::spontaneous() const
如果事件由應(yīng)用程序之外產(chǎn)生的,比如一個(gè)系統(tǒng)事件,返回 true,否則返回 false。對(duì)于繪制事件,該函數(shù)的返回值是未定義的。
-
Type QEvent::type() const
返回事件的類型
總結(jié)
- 上一篇: DDoS(Distributed Den
- 下一篇: bzoj 3747: [POI2015]