QEvent Class

QEvent 类是所有事件类的基类。事件对象包含事件参数。更多

公共类型

enum Type { None, ActionAdded, ActionChanged, ActionRemoved, ActivationChange, …, MaxUser }

属性

公共函数

QEvent(QEvent::Type type)
virtual ~QEvent()
void accept()
(since 6.0) virtual QEvent *clone() const
void ignore()
bool isAccepted() const
(since 6.0) bool isInputEvent() const
(since 6.0) bool isPointerEvent() const
(since 6.0) bool isSinglePointEvent() const
virtual void setAccepted(bool accepted)
bool spontaneous() const
QEvent::Type type() const

静态公共成员

int registerEventType(int hint = -1)

详细说明

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 只包含一个事件类型参数和一个 "接受 "标志。接受标志通过accept() 设置,并通过ignore() 清除。它默认设置,但不要依赖它,因为子类可能会选择在构造函数中清除它。

QEvent 的子类包含描述特定事件的附加参数。

另请参阅 QObject::event(),QObject::installEventFilter(),QCoreApplication::sendEvent(),QCoreApplication::postEvent() 和QCoreApplication::processEvents().

成员类型文档

enum QEvent::Type

该枚举类型定义了 Qt 中有效的事件类型。事件类型和每种类型的专用类如下:

常量说明
QEvent::None0不是事件。
QEvent::ActionAdded114已添加新操作 (QActionEvent)。
QEvent::ActionChanged113更改了一个操作 (QActionEvent)。
QEvent::ActionRemoved115删除了一个操作 (QActionEvent)。
QEvent::ActivationChange99部件的顶层窗口激活状态已更改。
QEvent::ApplicationActivate121该枚举已被弃用。请使用 ApplicationStateChange 代替。
QEvent::ApplicationActivatedApplicationActivate该枚举已被弃用。请使用 ApplicationStateChange 代替。
QEvent::ApplicationDeactivate122此枚举已被弃用。请使用 ApplicationStateChange 代替。
QEvent::ApplicationFontChange36默认应用程序字体已更改。
QEvent::ApplicationLayoutDirectionChange37默认应用程序布局方向已更改。
QEvent::ApplicationPaletteChange38默认应用程序调色板已更改。
QEvent::ApplicationStateChange214应用程序的状态已更改。
QEvent::ApplicationWindowIconChange35应用程序的图标已更改。
QEvent::ChildAdded68对象有了子对象 (QChildEvent)。
QEvent::ChildPolished69窗口小部件的子窗口被打磨 (QChildEvent)。
QEvent::ChildRemoved71一个对象失去了一个子对象 (QChildEvent)。
QEvent::ChildWindowAdded (since Qt 6.7)223窗口中添加了一个子窗口。
QEvent::ChildWindowRemoved (since Qt 6.7)224从窗口中删除了一个子窗口。
QEvent::Clipboard40剪贴板内容已更改。
QEvent::Close19小工具被关闭 (QCloseEvent)。
QEvent::CloseSoftwareInputPanel200Widget 想要关闭软件输入面板 (SIP)。
QEvent::ContentsRectChange178窗口小部件内容的边距已更改。
QEvent::ContextMenu82上下文弹出菜单 (QContextMenuEvent)。
QEvent::CursorChange183widget 的光标已更改。
QEvent::DeferredDelete52对象将在清理后被删除(QDeferredDeleteEvent)。
QEvent::DevicePixelRatioChange (since Qt 6.6)222该 widget 或窗口的底层后备存储的 devicePixelRatio 已更改。
QEvent::DragEnter60光标在拖放操作过程中进入部件 (QDragEnterEvent)。
QEvent::DragLeave62光标在拖放操作过程中离开部件 (QDragLeaveEvent)。
QEvent::DragMove61拖放操作正在进行 (QDragMoveEvent)。
QEvent::Drop63拖放操作已完成 (QDropEvent)。
QEvent::DynamicPropertyChange170从对象中添加、更改或删除了动态属性。
QEvent::EnabledChange98部件的启用状态已更改。
QEvent::Enter10鼠标进入 Widget 的边界 (QEnterEvent)。
QEvent::EnterEditFocus150编辑器部件获得编辑焦点。必须定义QT_KEYPAD_NAVIGATION
QEvent::EnterWhatsThisMode124当应用程序进入 "这是什么?"模式时发送到顶层部件。
QEvent::Expose206当窗口的屏幕内容失效并需要从后备存储刷新时,发送到窗口。
QEvent::FileOpen116文件打开请求 (QFileOpenEvent)。
QEvent::FocusIn8小工具或窗口获得键盘焦点 (QFocusEvent)。
QEvent::FocusOut9小工具或窗口失去键盘焦点 (QFocusEvent)。
QEvent::FocusAboutToChange23Widget 或 Window 的焦点即将改变 (QFocusEvent)
QEvent::FontChange97Widget 的字体已更改。
QEvent::Gesture198触发了一个手势 (QGestureEvent)。
QEvent::GestureOverride202触发了手势覆盖 (QGestureEvent)。
QEvent::GrabKeyboard188项目获得键盘抓取 (QGraphicsItem only )。
QEvent::GrabMouse186项目获得鼠标抓取 ( 仅限QGraphicsItem )。
QEvent::GraphicsSceneContextMenu159在图形场景上弹出上下文菜单 (QGraphicsSceneContextMenuEvent)。
QEvent::GraphicsSceneDragEnter164光标在拖放操作期间进入图形场景 (QGraphicsSceneDragDropEvent)。
QEvent::GraphicsSceneDragLeave166光标在拖放操作过程中离开图形场景 (QGraphicsSceneDragDropEvent)。
QEvent::GraphicsSceneDragMove165场景上正在进行拖放操作 (QGraphicsSceneDragDropEvent)。
QEvent::GraphicsSceneDrop167场景上的拖放操作已完成 (QGraphicsSceneDragDropEvent)。
QEvent::GraphicsSceneHelp163用户请求图形场景帮助 (QHelpEvent)。
QEvent::GraphicsSceneHoverEnter160鼠标光标进入图形场景中的悬停项 (QGraphicsSceneHoverEvent)。
QEvent::GraphicsSceneHoverLeave162鼠标光标离开图形场景中的悬停项 (QGraphicsSceneHoverEvent)。
QEvent::GraphicsSceneHoverMove161鼠标光标在图形场景中的悬浮项内移动 (QGraphicsSceneHoverEvent)。
QEvent::GraphicsSceneMouseDoubleClick158在图形场景中再次按下鼠标(双击) (QGraphicsSceneMouseEvent)。
QEvent::GraphicsSceneMouseMove155在图形场景中移动鼠标 (QGraphicsSceneMouseEvent)。
QEvent::GraphicsSceneMousePress156在图形场景中按下鼠标 (QGraphicsSceneMouseEvent)。
QEvent::GraphicsSceneMouseRelease157在图形场景中释放鼠标 (QGraphicsSceneMouseEvent)。
QEvent::GraphicsSceneMove182部件被移动 (QGraphicsSceneMoveEvent)。
QEvent::GraphicsSceneResize181调整了 Widget 的大小 (QGraphicsSceneResizeEvent)。
QEvent::GraphicsSceneWheel168鼠标滚轮在图形场景中滚动 (QGraphicsSceneWheelEvent)。
QEvent::GraphicsSceneLeave220光标离开图形场景 (QGraphicsSceneWheelEvent)。
QEvent::Hide18部件被隐藏 (QHideEvent)。
QEvent::HideToParent27子部件被隐藏。
QEvent::HoverEnter127鼠标光标进入悬浮 Widget (QHoverEvent)。
QEvent::HoverLeave128鼠标光标离开悬浮 Widget (QHoverEvent)。
QEvent::HoverMove129鼠标指针在悬浮 Widget 内移动 (QHoverEvent)。
QEvent::IconDrag96窗口的主图标被拖走 (QIconDragEvent)。
QEvent::IconTextChange101窗口部件的图标文本已更改。(已废弃)
QEvent::InputMethod83正在使用一个输入法 (QInputMethodEvent)。
QEvent::InputMethodQuery207输入法查询事件 (QInputMethodQueryEvent)
QEvent::KeyboardLayoutChange169键盘布局已更改。
QEvent::KeyPress6按键按下 (QKeyEvent)。
QEvent::KeyRelease7按键释放 (QKeyEvent)。
QEvent::LanguageChange89应用程序翻译已更改。
QEvent::LayoutDirectionChange90布局方向改变。
QEvent::LayoutRequest76需要重新设计部件布局。
QEvent::Leave11鼠标离开部件边界。
QEvent::LeaveEditFocus151编辑器部件在编辑时失去焦点。必须定义 QT_KEYPAD_NAVIGATION。
QEvent::LeaveWhatsThisMode125当应用程序离开 "What's This?"(这是什么?
QEvent::LocaleChange88系统地域已更改。
QEvent::NonClientAreaMouseButtonDblClick176鼠标双击发生在客户端区域之外 (QMouseEvent)。
QEvent::NonClientAreaMouseButtonPress174在客户端区域外按下鼠标按钮 (QMouseEvent)。
QEvent::NonClientAreaMouseButtonRelease175在客户端区域外释放了鼠标按钮 (QMouseEvent)。
QEvent::NonClientAreaMouseMove173在客户端区域外移动了鼠标 (QMouseEvent)。
QEvent::MacSizeChange177用户更改了部件尺寸(仅限 macOS)。
QEvent::MetaCall43通过QMetaObject::invokeMethod() 调用异步方法。
QEvent::ModifiedChange102部件修改状态已更改。
QEvent::MouseButtonDblClick4再次按下鼠标 (QMouseEvent)。
QEvent::MouseButtonPress2鼠标按下 (QMouseEvent)。
QEvent::MouseButtonRelease3释放鼠标 (QMouseEvent)。
QEvent::MouseMove5鼠标移动 (QMouseEvent)。
QEvent::MouseTrackingChange109鼠标跟踪状态已更改。
QEvent::Move13Widget 的位置发生变化 (QMoveEvent)。
QEvent::NativeGesture197系统检测到一个手势 (QNativeGestureEvent)。
QEvent::OrientationChange208屏幕方向发生变化 ( QScreenOrientationChangeEvent )。
QEvent::Paint12需要更新屏幕 (QPaintEvent)。
QEvent::PaletteChange39部件的调色板发生变化。
QEvent::ParentAboutToChange131对象的父对象即将改变。仅发送给某些对象类型,如QWidget
QEvent::ParentChange21对象父级已更改。仅发送到某些对象类型,如QWidget
QEvent::ParentWindowAboutToChange (since Qt 6.7)225父窗口即将更改。
QEvent::ParentWindowChange (since Qt 6.7)226父窗口已更改。
QEvent::PlatformPanel212已请求平台专用面板。
QEvent::PlatformSurface217已创建或即将销毁一个本地平台表面 (QPlatformSurfaceEvent)。
QEvent::Polish75部件已抛光。
QEvent::PolishRequest74该窗口部件应抛光。
QEvent::QueryWhatsThis123如果有 "这是什么?"帮助,小部件应接受该事件 (QHelpEvent)。
QEvent::Quit20应用程序已退出。
QEvent::ReadOnlyChange (since Qt 5.4)106Widget 的只读状态已更改。
QEvent::RequestSoftwareInputPanel199Widget 想要打开软件输入面板 (SIP)。
QEvent::Resize14Widget 的大小发生变化 (QResizeEvent)。
QEvent::ScrollPrepare204对象需要填写几何信息 (QScrollPrepareEvent)。
QEvent::Scroll205对象需要滚动到提供的位置 (QScrollEvent)。
QEvent::Shortcut117子对象中的按键,用于处理快捷键 (QShortcutEvent)。
QEvent::ShortcutOverride51子对象中的按键,用于覆盖快捷键处理 (QKeyEvent)。当快捷键即将触发时,ShortcutOverride 发送到活动窗口。这样,客户端(如窗口小部件)就可以通过接受该事件,发出它们将自行处理快捷键的信号。如果接受了快捷方式覆盖,事件就会以普通按键的方式发送到焦点窗口部件。否则,它会触发快捷操作(如果存在的话)。
QEvent::Show17部件已显示在屏幕上 (QShowEvent)。
QEvent::ShowToParent26已显示一个子部件。
QEvent::SockAct50套接字已激活,用于实现QSocketNotifier
QEvent::StateMachineSignal192向状态机发送信号 (QStateMachine::SignalEvent)。
QEvent::StateMachineWrapped193事件是另一个事件的包装器,即包含另一个事件 (QStateMachine::WrappedEvent)。
QEvent::StatusTip112请求状态提示 (QStatusTipEvent)。
QEvent::StyleChange100小工具的样式已更改。
QEvent::TabletMove87Wacom 手写板移动 (QTabletEvent)。
QEvent::TabletPress92Wacom 手写板按下 (QTabletEvent)。
QEvent::TabletRelease93Wacom 平板电脑发布 (QTabletEvent)。
QEvent::TabletEnterProximity171Wacom 平板电脑进入近距离事件 (QTabletEvent), 发送到QApplication
QEvent::TabletLeaveProximity172Wacom 手写板离开近距离事件 (QTabletEvent),发送至QApplication
QEvent::TabletTrackingChange (since Qt 5.9)219Wacom 手写板跟踪状态已更改。
QEvent::ThreadChange22对象被移动到另一个线程。这是在前一个线程中发送给该对象的最后一个事件。请参见QObject::moveToThread( )。
QEvent::Timer1常规计时器事件 (QTimerEvent)。
QEvent::ToolBarChange120在 macOS 上切换工具栏按钮。
QEvent::ToolTip110要求提供工具提示 (QHelpEvent)。
QEvent::ToolTipChange184部件的工具提示已更改。
QEvent::TouchBegin194触摸屏或轨迹板事件序列开始 (QTouchEvent)。
QEvent::TouchCancel209取消触摸事件序列 (QTouchEvent)。
QEvent::TouchEnd196触摸事件序列结束 (QTouchEvent)。
QEvent::TouchUpdate195触摸屏事件 (QTouchEvent)。
QEvent::UngrabKeyboard189项目失去键盘抓取 (QGraphicsItem only )。
QEvent::UngrabMouse187项目失去鼠标抓取 (QGraphicsItem,QQuickItem)。
QEvent::UpdateLater78部件应排队等待稍后重新绘制。
QEvent::UpdateRequest77部件应重新绘制。
QEvent::WhatsThis111小工具应显示 "这是什么?"帮助 (QHelpEvent)。
QEvent::WhatsThisClicked118点击了部件的 "这是什么?"帮助中的链接。
QEvent::Wheel31鼠标滚轮滚动 (QWheelEvent)。
QEvent::WinEventAct132发生了 Windows 特有的激活事件。
QEvent::WindowActivate24窗口被激活。
QEvent::WindowBlocked103窗口被模式对话框阻止。
QEvent::WindowDeactivate25窗口已停用。
QEvent::WindowIconChange34窗口图标已更改。
QEvent::WindowStateChange105window's state (最小化、最大化或全屏)已更改 (QWindowStateChangeEvent)。
QEvent::WindowTitleChange33窗口标题已更改。
QEvent::WindowUnblocked104退出模式对话框后,窗口已解除锁定。
QEvent::WinIdChange203本机窗口部件的窗口系统标识符已更改。
QEvent::ZOrderChange126窗口部件的 Z 排序已更改。此事件不会发送到顶层窗口。
QEvent::SafeAreaMarginsChange (since Qt 6.9)227窗口的安全区域边距已更改。

用户事件的值应介于UserMaxUser 之间:

常量说明
QEvent::User1000用户自定义事件。
QEvent::MaxUser65535最后一个用户事件 ID。

为方便起见,您可以使用registerEventType() 函数为您的应用程序注册和保留自定义事件类型。这样做可以避免意外重复使用应用程序中其他地方已在使用的自定义事件类型。

属性文档

accepted : bool

该属性包含事件对象的接受标志。

设置接受参数表示事件接收者希望接收该事件。不想要的事件可能会传播到父 widget。默认情况下,isAccepted() 设置为 true,但不要依赖于此,因为子类可能会选择在构造函数中清除它。

为方便起见,也可以使用accept() 设置接受标志,使用ignore() 清除接受标志。

注意: 接受QPointerEvent 会隐式地accepts 该事件携带的所有points

访问函数:

bool isAccepted() const
virtual void setAccepted(bool accepted)

成员函数文档

[explicit] QEvent::QEvent(QEvent::Type type)

构造type 类型的事件对象。

[virtual noexcept] QEvent::~QEvent()

销毁事件。如果它是posted ,则会从要发布的事件列表中删除。

void QEvent::accept()

设置事件对象的接受标志,相当于调用setAccepted(true)。

设置接受参数表示事件接收者希望接收该事件。不想要的事件可能会传播到父 widget。

另请参阅 ignore().

[virtual, since 6.0] QEvent *QEvent::clone() const

创建并返回此事件的一个相同副本。

此函数在 Qt 6.0 中引入。

void QEvent::ignore()

清除事件对象的接受标志参数,相当于调用setAccepted(false)。

清除接受参数表示事件接收者不需要该事件。不想要的事件可能会传播到父 widget。

另请参阅 accept().

[noexcept, since 6.0] bool QEvent::isInputEvent() const

如果事件对象是QInputEvent 或其子类之一,则返回true

此函数在 Qt 6.0 中引入。

[noexcept, since 6.0] bool QEvent::isPointerEvent() const

如果事件对象是QPointerEvent 或其子类之一,则返回true

此函数在 Qt 6.0 中引入。

[noexcept, since 6.0] bool QEvent::isSinglePointEvent() const

如果事件对象是QSinglePointEvent 的子类,则返回true

此函数在 Qt 6.0 中引入。

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

注册并返回自定义事件类型。如果提供的hint 可用,则使用该值,否则将返回介于QEvent::UserQEvent::MaxUser 之间、尚未注册的值。如果hint 的值不在QEvent::UserQEvent::MaxUser 之间,则会被忽略。

如果所有可用值都已被占用或程序正在关闭,则返回-1。

注意:此函数是线程安全的

bool QEvent::spontaneous() const

如果事件源于应用程序之外(系统事件),则返回true ;否则返回false

QEvent::Type QEvent::type() const

返回事件类型。

© 2025 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.