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中有效的事件类型。事件类型和每个类型的专门类如下:

常量 描述
QEvent::None 0 不是一个事件
QEvent::ActionAdded 114 一个新 action 被添加(QActionEvent)
QEvent::ActionChanged 113 一个 action 被改变(QActionEvent)
QEvent::ActionRemoved 115 一个 action 被移除(QActionEvent)
QEvent::ActivationChange 99 Widget 的顶层窗口激活状态发生了变化
QEvent::ApplicationActivate 121 这个枚举已被弃用,使用 ApplicationStateChange 代替
QEvent::ApplicationActivated ApplicationActivate 这个枚举已被弃用,使用 ApplicationStateChange 代替
QEvent::ApplicationDeactivate 122 这个枚举已被弃用,使用 ApplicationStateChange 代替
QEvent::ApplicationFontChange 36 应用程序的默认字体发生了变化
QEvent::ApplicationLayoutDirectionChange 37 应用程序的默认布局方向发生了变化
QEvent::ApplicationPaletteChange 38 应用程序的默认调色板发生了变化
QEvent::ApplicationStateChange 214 应用程序的状态发生了变化
QEvent::ApplicationWindowIconChange 35 应用程序的图标发生了变化
QEvent::ChildAdded 68 一个对象获得孩子(QChildEvent)
QEvent::ChildPolished 69 一个部件的孩子被抛光(QChildEvent)
QEvent::ChildRemoved 71 一个对象时区孩子(QChildEvent)
QEvent::Clipboard 40 剪贴板的内容发生改变
QEvent::Close 19 Widget 被关闭(QCloseEvent)
QEvent::CloseSoftwareInputPanel 200 一个部件要关闭软件输入面板(SIP)
QEvent::ContentsRectChange 178 部件内容区域的外边距发生改变
QEvent::ContextMenu 82 上下文弹出菜单(QContextMenuEvent)
QEvent::CursorChange 183 部件的鼠标发生改变
QEvent::DeferredDelete 52 对象被清除后将被删除(QDeferredDeleteEvent)
QEvent::DragEnter 60 在拖放操作期间鼠标进入窗口部件(QDragEnterEvent)
QEvent::DragLeave 62 在拖放操作期间鼠标离开窗口部件(QDragLeaveEvent)
QEvent::DragMove 61 拖放操作正在进行(QDragMoveEvent)
QEvent::Drop 63 拖放操作完成(QDropEvent)
QEvent::DynamicPropertyChange 170 动态属性已添加、更改或从对象中删除
QEvent::EnabledChange 98 部件的 enabled 状态已更改
QEvent::Enter 10 鼠标进入部件的边界(QEnterEvent)
QEvent::EnterEditFocus 150 编辑部件获得焦点进行编辑,必须定义 QT_KEYPAD_NAVIGATION
QEvent::EnterWhatsThisMode 124 当应用程序进入“What’s This?”模式,发送到 toplevel 顶层部件
QEvent::Expose 206 当其屏幕上的内容无效,发送到窗口,并需要从后台存储刷新
QEvent::FileOpen 116 文件打开请求(QFileOpenEvent)
QEvent::FocusIn 8 部件或窗口获得键盘焦点(QFocusEvent)
QEvent::FocusOut 9 部件或窗口失去键盘焦点(QFocusEvent)
QEvent::FocusAboutToChange 23 部件或窗口焦点即将改变(QFocusEvent)
QEvent::FontChange 97 部件的字体发生改变
QEvent::Gesture 198 触发了一个手势(QGestureEvent)
QEvent::GestureOverride 202 触发了手势覆盖(QGestureEvent)
QEvent::GrabKeyboard 188 Item 获得键盘抓取(仅限 QGraphicsItem)
QEvent::GrabMouse 186 项目获得鼠标抓取(仅限 QGraphicsItem)
QEvent::GraphicsSceneContextMenu 159 在图形场景上的上下文弹出菜单(QGraphicsScene ContextMenuEvent)
QEvent::GraphicsSceneDragEnter 164 在拖放操作期间,鼠标进入图形场景(QGraphicsSceneDragDropEvent)
QEvent::GraphicsSceneDragLeave 166 在拖放操作期间鼠标离开图形场景(QGraphicsSceneDragDropEvent)
QEvent::GraphicsSceneDragMove 165 在场景上正在进行拖放操作(QGraphicsSceneDragDropEvent)
QEvent::GraphicsSceneDrop 167 在场景上完成拖放操作(QGraphicsSceneDragDropEvent)
QEvent::GraphicsSceneHelp 163 用户请求图形场景的帮助(QHelpEvent)
QEvent::GraphicsSceneHoverEnter 160 鼠标进入图形场景中的悬停项(QGraphicsSceneHoverEvent)
QEvent::GraphicsSceneHoverLeave 162 鼠标离开图形场景中一个悬停项(QGraphicsSceneHoverEvent)
QEvent::GraphicsSceneHoverMove 161 鼠标在图形场景中的悬停项内移动(QGraphicsSceneHoverEvent)
QEvent::GraphicsSceneMouseDoubleClick 158 鼠标在图形场景中再次按下(双击)(QGraphicsSceneMouseEvent)
QEvent::GraphicsSceneMouseMove 155 鼠标在图形场景中移动(QGraphicsSceneMouseEvent)
QEvent::GraphicsSceneMousePress 156 鼠标在图形场景中按下(QGraphicsSceneMouseEvent)
QEvent::GraphicsSceneMouseRelease 157 鼠标在图形场景中释放(QGraphicsSceneMouseEvent)
QEvent::GraphicsSceneMove 182 部件被移动(QGraphicsSceneMoveEvent)
QEvent::GraphicsSceneResize 181 部件已调整大小(QGraphicsSceneResizeEvent)
QEvent::GraphicsSceneWheel 168 鼠标滚轮在图形场景中滚动(QGraphicsSceneWheelEvent)
QEvent::Hide 18 部件被隐藏(QHideEvent)
QEvent::HideToParent 27 子部件被隐藏(QHideEvent)
QEvent::HoverEnter 127 鼠标进入悬停部件(QHoverEvent)
QEvent::HoverLeave 128 鼠标留离开悬停部件(QHoverEvent)
QEvent::HoverMove 129 鼠标在悬停部件内移动(QHoverEvent)
QEvent::IconDrag 96 窗口的主图标被拖走(QIconDragEvent)
QEvent::IconTextChange 101 部件的图标文本发生改变(已弃用)
QEvent::InputMethod 83 正在使用输入法(QInputMethodEvent)
QEvent::InputMethodQuery 207 输入法查询事件(QInputMethodQueryEvent)
QEvent::KeyboardLayoutChange 169 键盘布局已更改
QEvent::KeyPress 6 键盘按下(QKeyEvent)
QEvent::KeyRelease 7 键盘释放(QKeyEvent)
QEvent::LanguageChange 89 应用程序翻译发生改变
QEvent::LayoutDirectionChange 90 布局的方向发生改变
QEvent::LayoutRequest 76 部件的布局需要重做
QEvent::Leave 11 鼠标离开部件的边界
QEvent::LeaveEditFocus 151 编辑部件失去编辑的焦点,必须定义 QT_KEYPAD_NAVIGATION
QEvent::LeaveWhatsThisMode 125 当应用程序离开“What’s This?”模式,发送到顶层部件
QEvent::LocaleChange 88 系统区域设置发生改变
QEvent::NonClientAreaMouseButtonDblClick 176 鼠标双击发生在客户端区域外
QEvent::NonClientAreaMouseButtonPress 174 鼠标按钮按下发生在客户端区域外
QEvent::NonClientAreaMouseButtonRelease 175 鼠标按钮释放发生在客户端区域外
QEvent::NonClientAreaMouseMove 173 鼠标移动发生在客户区域外
QEvent::MacSizeChange 177 用户更改了部件的大小(仅限 OS X)
QEvent::MetaCall 43 通过 QMetaObject::invokeMethod() 调用异步方法
QEvent::ModifiedChange 102 部件修改状态发生改变
QEvent::MouseButtonDblClick 4 鼠标再次按下(QMouseEvent)
QEvent::MouseButtonPress 2 鼠标按下(QMouseEvent)
QEvent::MouseButtonRelease 3 鼠标释放(QMouseEvent)
QEvent::MouseMove 5 鼠标移动(QMouseEvent)
QEvent::MouseTrackingChange 109 鼠标跟踪状态发生改变
QEvent::Move 13 部件的位置发生改变(QMoveEvent)
QEvent::NativeGesture 197 系统检测到手势(QNativeGestureEvent)
QEvent::OrientationChange 208 屏幕方向发生改变(QScreenOrientationChangeEvent)
QEvent::Paint 12 需要屏幕更新(QPaintEvent)
QEvent::PaletteChange 39 部件的调色板发生改变
QEvent::ParentAboutToChange 131 部件的 parent 将要更改
QEvent::ParentChange 21 部件的 parent 发生改变
QEvent::PlatformPanel 212 请求一个特定于平台的面板
QEvent::PlatformSurface 217 原生平台表面已创建或即将被销毁(QPlatformSurfaceEvent)
QEvent::Polish 75 部件被抛光
QEvent::PolishRequest 74 部件应该被抛光
QEvent::QueryWhatsThis 123 如果部件有“What’s This?”帮助,应该接受事件
QEvent::ReadOnlyChange 106 部件的 read-only 状态发生改变
QEvent::RequestSoftwareInputPanel 199 部件想要打开软件输入面板(SIP)
QEvent::Resize 14 部件的大小发生改变(QResizeEvent)
QEvent::ScrollPrepare 204 对象需要填充它的几何信息(QScrollPrepareEvent)
QEvent::Scroll 205 对象需要滚动到提供的位置(QScrollEvent)
QEvent::Shortcut 117 快捷键处理(QShortcutEvent)
QEvent::ShortcutOverride 51 按下按键,用于覆盖快捷键(QKeyEvent)
QEvent::Show 17 部件显示在屏幕上(QShowEvent)
QEvent::ShowToParent 26 子部件被显示
QEvent::SockAct 50 Socket 激活,用于实现 QSocketNotifier
QEvent::StateMachineSignal 192 信号被传递到状态机(QStateMachine::SignalEvent)
QEvent::StateMachineWrapped 193 事件是一个包装器,用于包含另一个事件(QStateMachine::WrappedEvent)
QEvent::StatusTip 112 状态提示请求(QStatusTipEvent)
QEvent::StyleChange 100 部件的样式发生改变
QEvent::TabletMove 87 Wacom 写字板移动(QTabletEvent)
QEvent::TabletPress 92 Wacom 写字板按下(QTabletEvent)
QEvent::TabletRelease 93 Wacom 写字板释放(QTabletEvent)
QEvent::OkRequest 94 Ok 按钮在装饰前被按下,仅支持 Windows CE
QEvent::TabletEnterProximity 171 Wacom 写字板进入接近事件(QTabletEvent),发送到 QApplication
QEvent::TabletLeaveProximity 172 Wacom 写字板离开接近事件(QTabletEvent),发送到 QApplication
QEvent::ThreadChange 22 对象被移动到另一个线程。这是发送到此对象的最后一个事件在上一个线程中,参见:QObject::moveToThread()
QEvent::Timer 1 定时器事件(QTimerEvent)
QEvent::ToolBarChange 120 工具栏按钮在 OS X 上进行切换
QEvent::ToolTip 110 一个 tooltip 请求(QHelpEvent)
QEvent::ToolTipChange 184 部件的 tooltip 发生改变
QEvent::TouchBegin 194 触摸屏或轨迹板事件序列的开始(QTouchEvent)
QEvent::TouchCancel 209 取消触摸事件序列(QTouchEvent)
QEvent::TouchEnd 196 触摸事件序列结束(QTouchEvent)
QEvent::TouchUpdate 195 触摸屏事件(QTouchEvent)
QEvent::UngrabKeyboard 189 Item 失去键盘抓取(QGraphicsItem)
QEvent::UngrabMouse 187 Item 失去鼠标抓取(QGraphicsItem、QQuickItem)
QEvent::UpdateLater 78 部件应该排队在以后重新绘制
QEvent::UpdateRequest 77 部件应该被重绘
QEvent::WhatsThis 111 部件应该显示“What’s This”帮助(QHelpEvent)
QEvent::WhatsThisClicked 118 部件的“What’s This”帮助链接被点击
QEvent::Wheel 31 鼠标滚轮滚动(QWheelEvent)
QEvent::WinEventAct 132 发生了 Windows 特定的激活事件
QEvent::WindowActivate 24 窗口已激活
QEvent::WindowBlocked 103 窗口被模态对话框阻塞
QEvent::WindowDeactivate 25 窗户被停用
QEvent::WindowIconChange 34 窗口的图标发生改变
QEvent::WindowStateChange 105 窗口的状态(最小化、最大化或全屏)发生改变(QWindowStateChangeEvent)
QEvent::WindowTitleChange 33 窗口的标题发生改变
QEvent::WindowUnblocked 104 一个模态对话框退出后,窗口将不被阻塞
QEvent::WinIdChange 203 本地窗口的系统标识符发生改变
QEvent::ZOrderChange 126 部件的 z 值发生了改变,该事件不会发送给顶层窗口

用户事件的值应该介于 User 和 MaxUser 之间。

常量 描述
QEvent::User 1000 用户定义的事件
QEvent::MaxUser 65535 最后的用户事件 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 
      返回事件的类型

http://blog.csdn.net/liang19890820/article/details/51933153

Qt之QEvent(所有事件的翻译)的更多相关文章

  1. Qt消息机制和事件(二)

    三,事件过滤器 有时候,对象需要查看.甚至要拦截发送到另外对象的事件.例如,对话框可能想要拦截按键事件,不让别的组件接收到:或者要修改回车键的默认处理. 通过前面的章节,我们已经知道,Qt 创建了QE ...

  2. Qt消息机制和事件(一)

    一,事件 事件(event)是由系统或者 Qt 本身在不同的时刻发出的.当用户按下鼠标.敲下键盘,或者是窗口需要重新绘制的时候,都会发出一个相应的事件.一些事件在对用户操作做出响应时发出,如键盘事件等 ...

  3. Qt消息机制和事件、事件过滤

    一,事件 事件(event)是由系统或者 Qt 本身在不同的时刻发出的.当用户按下鼠标.敲下键盘,或者是窗口需要重新绘制的时候,都会发出一个相应的事件.一些事件在对用户操作做出响应时发出,如键盘事件等 ...

  4. Qt消息机制和事件

    Qt消息机制和事件 1 事件 事件(event)是由系统或者 Qt 本身在不同的时刻发出的.当用户按下鼠标.敲下键盘,或者是窗口需要重新绘制的时候,都会发出一个相应的事件.一些事件在对用户操作做出响应 ...

  5. QT 11 鼠标键盘事件添加

    鼠标事件 void mousePressEvent(QMouseEvent *event); //单击 void mouseReleaseEvent(QMouseEvent *event); //释放 ...

  6. Qt 的线程与事件循环

    Qt 的线程与事件循环

  7. Qt窗口退出与事件循环退出的问题

    我在Qt主程序中开启一个线程,线程中使用信号-槽来产生QMainWindow(GUI),main函数代码如下:int main(int argc, char *argv[]){ QApplicatio ...

  8. QT多线程及通过事件进行通信(通过自定义事件,然后QApplication::postEvent给主界面,我之前用的是信号槽)

    可以通过QThread实现跨平台的多线程开发,Qt库负责在特定平台上的特定多线程实现.要采用QThread进行多线程开发,首先需要包含头文件: #include <QThread> 然后需 ...

  9. Qt中的键盘事件,以及焦点的设置(比较详细)

    Qt键盘事件属于Qt事件系统,所以事件系统中所有规则对按键事件都有效.下面关注点在按键特有的部分: focus 一个拥有焦点(focus)的QWidget才可以接受键盘事件.有输入焦点的窗口是活动窗口 ...

随机推荐

  1. 【Mysql】—— 索引的分类

    注意:索引是在存储引擎中实现的,也就是说不同的存储引擎,会使用不同的索引.MyISAM和InnoDB存储引擎:只支持BTREE索引,也就是说默认使用BTREE,不能够更换.MEMORY/HEAP存储引 ...

  2. Bootstrap洼地

    前面的话 这是一个轻量.灵活的组件,它能延伸至整个浏览器视口来展示网站上的关键内容.本文将详细介绍Bootstrap洼地 概述 洼地(Well)样式的效果和巨幕jumbotron样式类似,不同点是we ...

  3. Java 8 Optional类深度解析(转载)

    身为一名Java程序员,大家可能都有这样的经历:调用一个方法得到了返回值却不能直接将返回值作为参数去调用别的方法.我们首先要判断这个返回值是否为null,只有在非空的前提下才能将其作为其他方法的参数. ...

  4. 【BZOJ2003】[HNOI2010]矩阵(搜索)

    [BZOJ2003][HNOI2010]矩阵(搜索) 题面 懒得粘了,不难找吧. 题解 看的学长写的题解,也懒得写了 大概是这样的. 不难发现只需要确定第一行和第一列就能确定答案,而确定第一行之后每确 ...

  5. Angularjs中的$q详解

    先说说什么是Promise,什么是$q吧.Promise是一种异步处理模式,有很多的实现方式,比如著名的Kris Kwal's Q还有JQuery的Deffered. 什么是Promise 以前了解过 ...

  6. Luogu 1979 NOIP 2013 华容道(搜索,最短路径)

    Luogu 1979 NOIP 2013 华容道(搜索,最短路径) Description 小 B 最近迷上了华容道,可是他总是要花很长的时间才能完成一次.于是,他想到用编程来完成华容道:给定一种局面 ...

  7. ACCESS与SQL Server下SQL Like 查询的不同

    在ACCESS中LIKE的用法Access里like的通配符用法是这样: “?”表示任何单一字符: “*”表示零个或多个字符: “#”表示任何一个数字 所以应该是: select * from dat ...

  8. ReactNative组件之scrollView实现轮播

    想要实现轮播效果,首先安装时间定时器 接下来就是在我们的项目中使用定时器 接下来我们将竖着的轮播图变成横着的 接下来我们调整间距 我们知道轮播图下方,还有5个圆点,那我们怎么做呢? 拿到每一个圆点 看 ...

  9. 使用babel将ES6编译成ES5

    现在ES6已经非常成熟了,我的需求很明确,就是只需要将ES6编译成ES5. 项目目录为 借鉴的博客链接为https://blog.csdn.net/suwu150/article/details/77 ...

  10. SNP (Single Nucleotide Polymorphism), SNV ( single nucleotide variants ) , Indel (insertion-deletion) 的区别

    SNP (Single Nucleotide Polymorphism):强调在一个群体中具有一定频率的变异,一般为二态性.比如G→C SNV ( single nucleotide variants ...