鼠标事件(QMouseEvent),如点击、移动、释放等。
键盘事件(QKeyEvent),如按键按下和释放。
窗口事件(QResizeEvent, QMoveEvent),当窗口大小或位置改变时。
绘制事件(QPaintEvent),需要重新绘制部分或全部窗口时。
定时器事件(QTimerEvent),定时器超时时。
拖放事件(QDragEnterEvent, QDropEvent),进行拖放操作时。
焦点事件(QFocusEvent),当部件获得或失去键盘焦点时。
QEvent
QEvent 类是 Qt 事件系统的基础。它是所有事件类的基类,提供了处理各种事件所需的基本功能。Qt 中的事件包括用户交互事件(如鼠标点击和键盘按键)、窗口状态改变事件(如打开、关闭、最小化)、以及其他许多类型的事件。以下是 QEvent 类中主要函数的详细说明:
构造函数和析构函数
QEvent(QEvent::Type type)
构造一个事件。type 参数指定了事件的类型,这决定了事件的性质和用途。QEvent::Type 是一个枚举,包含了 Qt 支持的所有事件类型,如 QEvent::MouseMove、QEvent::KeyPress 等。
virtual ~QEvent()
虚析构函数。因为 QEvent 是许多事件类的基类,所以析构函数是虚的,确保派生类的对象可以通过基类指针正确地销毁。
事件状态管理
void accept()
标记事件为已接受。对于某些事件(如鼠标事件),接受事件意味着表示事件已经被处理,不需要进一步传递。
void ignore()
标记事件为已忽略。这表示事件没有被处理,允许事件继续传递给其他事件处理器。
bool isAccepted() const
返回事件的接受状态。如果事件已被接受,返回 true;如果被忽略,返回 false。
void setAccepted(bool accepted)
显式设置事件的接受状态。如果 accepted 为 true,则事件被标记为已接受;如果为 false,则被标记为已忽略。
事件信息查询
bool spontaneous() const
返回事件是否为自发的(spontaneous)。自发事件是由操作系统直接生成的,而非由 Qt 应用程序生成。例如,用户的鼠标点击是自发事件,而程序调用 update() 触发的重绘事件不是自发的。
QEvent::Type type() const
返回事件的类型。这个值是 QEvent::Type 枚举中的一个,表示事件的具体类别。
[static] int QEvent::registerEventType(int hint = -1)
在Qt中,QEvent::registerEventType(int hint = -1)是一个静态函数,用于注册一个新的事件类型。这在您需要创建自定义事件时非常有用。当Qt的标准事件不足以满足您的需求时,您可以注册一个新的事件类型,并在应用程序中使用它。
参数
hint: 这是一个可选参数,用于请求一个特定的事件类型值。如果指定为-1(默认值),Qt将选择第一个可用的事件类型值。如果指定了其他值,Qt会尝试分配该值作为事件类型,但如果该值已被占用,Qt将选择另一个值。hint参数提供了一种方式来尝试获取一个易于记忆的事件类型值,但不能保证分配成功。
返回值
函数返回一个int值,表示注册的事件类型。这个返回值是唯一的,可以在自定义事件中使用。
使用示例
假设您正在开发一个应用程序,需要处理一个特殊的网络数据到达事件。由于Qt标准事件不包含这种类型的事件,您可以注册一个新的事件类型来表示它:
// 在适当的地方注册新的事件类型
int MyCustomEventType = QEvent::registerEventType();// 然后,您可以在需要的地方构造并发送这个自定义事件
QEvent *event = new QEvent(static_cast<QEvent::Type>(MyCustomEventType));
QCoreApplication::postEvent(receiver, event);
在上面的示例中,MyCustomEventType是通过调用QEvent::registerEventType()获得的新事件类型。然后,您可以使用这个类型来构造自定义事件,并通过QCoreApplication::postEvent()将事件发送给特定的事件接收者(receiver)。
注意事项
注册的事件类型是全局唯一的,一旦注册,所有实例和应用程序中都可以使用该事件类型。
由于事件类型的数量有限,只有在确实需要时才应注册新的事件类型。
自定义事件的处理通常需要在事件接收者类中 重写event() 函数或特定的事件处理函数。
鼠标事件
- Qt::MouseButton button() const
返回触发鼠标事件的单个按钮。对于 mousePressEvent 和 mouseReleaseEvent 事件,这将是被按下或释放的那个按钮。对于 mouseMoveEvent,这个函数返回 Qt::NoButton。 - Qt::MouseButtons buttons() const
返回在事件发生时所有被按下的鼠标按钮的状态。这是一个位字段,可以表示多个按钮同时被按下,例如,左键和右键同时被按下。 - Qt::MouseEventFlags flags() const
返回一个标志集,这些标志为鼠标事件提供额外的上下文信息,例如,是否设置了某些特定的事件属性。 - QPoint globalPos() const
返回事件发生时鼠标光标的全局位置,即相对于整个屏幕的位置。
int globalX() const 和 int globalY() const
分别返回事件发生时鼠标光标的全局X和Y坐标。 - const QPointF &localPos() const
返回事件发生时鼠标光标的位置,这个位置是相对于接收事件的小部件的局部坐标系的。QPointF 提供了更精确的浮点数坐标。 - QPoint pos() const
返回事件发生时鼠标光标的位置,这个位置是相对于接收事件的小部件的局部坐标系的。这是一个 QPoint 对象,提供整数坐标。 - const QPointF &screenPos() const
返回事件发生时鼠标光标的位置,这个位置是相对于接收事件的小部件所在屏幕的坐标系的。QPointF 提供了更精确的浮点数坐标。 - Qt::MouseEventSource source() const
返回鼠标事件的来源。这个值可以帮助区分事件是由鼠标、触摸屏还是其他输入设备生成的。
-
MouseEventNotSynthesized:表示该鼠标事件是一个真实的事件,即直接由用户的物理操作(如鼠标移动或点击)产生的,没有经过任何形式的软件合成或模拟。
-
MouseEventSynthesizedBySystem:表示该鼠标事件是由系统合成的。这可能发生在操作系统层面,例如,当系统自动执行某些操作(如响应某些驱动程序的行为)时,可能会合成鼠标事件。
-
MouseEventSynthesizedByQt:表示该鼠标事件是由Qt框架合成的。Qt可能会在某些情况下合成事件,例如,为了提供平台间的一致性或处理某些特殊的输入情况。
-
MouseEventSynthesizedByApplication:表示该鼠标事件是由应用程序代码合成的。开发者可能会在应用程序中主动合成鼠标事件,以模拟用户操作或自动化测试。
- const QPointF &windowPos() const
返回事件发生时鼠标光标的位置,这个位置是相对于接收事件的窗口的坐标系的。QPointF 提供了更精确的浮点数坐标。
鼠标滚轮事件
- QPoint angleDelta() const: 返回滚轮事件的角度增量,通常用于标准滚轮。
- Qt::MouseButtons buttons() const: 返回在滚轮事件发生时被按下的鼠标按钮。
- QPointF globalPosition() const: 返回事件发生时鼠标的全局位置。
- bool inverted() const: 返回一个布尔值,指示滚动方向是否被反转。
- Qt::ScrollPhase phase() const: 返回滚轮事件的阶段,比如Qt::ScrollPhase::ScrollBegin、Qt::ScrollPhase::ScrollUpdate等。
- Qt::NoScrollPhase (0): 输入设备不支持滚动阶段。这表明事件来源的设备(如鼠标)无法区分滚动的不同阶段,只提供基本的滚动数据。
- Qt::ScrollBegin (1): 滚动即将开始,但滚动距离尚未改变。这可以用于触发滚动开始的特定动作或动画。
- Qt::ScrollUpdate (2): 滚动距离已经改变(默认值)。这是最常见的阶段,表示用户正在滚动。
- Qt::ScrollEnd (3): 滚动已经结束,滚动距离不再改变。这可以用于触发滚动结束的动作或恢复到滚动前的某种状态。
- Qt::ScrollMomentum (4): 用户不再触摸输入设备,但由于滚动动量,滚动仍在继续。这适用于支持惯性滚动的设备,允许应用程序处理由于手指离开触摸屏或触摸板而继续发生的滚动。
- QPoint pixelDelta() const: 返回滚轮事件的像素增量,对于高精度滚轮设备较为常见。
- QPointF position() const: 返回事件发生的位置,相对于接收事件的窗口。
- Qt::MouseEventSource source() const: 返回滚轮事件的来源。
键盘事件
- int count() const
返回事件的计数,对于大多数键盘事件,这个值为1。 - bool isAutoRepeat() const
检查这个事件是否是由键盘的自动重复功能产生的。 - int key() const
返回触发事件的键的代码(Qt 的 Qt::Key 枚举)。 - bool matches(QKeySequence::StandardKey key) const
检查该事件是否与给定的 QKeySequence::StandardKey 匹配。 - Qt::KeyboardModifiers modifiers() const
返回事件发生时有效的修饰键(如 Shift、Ctrl、Alt)。 - quint32 nativeModifiers() const
返回事件发生时的本地修饰键状态。
返回代表键盘修饰符键状态的原生(操作系统特定的)修饰符代码。这些修饰符包括Shift、Ctrl、Alt和Meta(在Mac上是Command键)等。nativeModifiers 的值是特定于平台的,因此它们在不同的操作系统上可能会有不同的表示方法。
应用场景:当你需要精确地处理用户输入,尤其是在需要区分不同操作系统默认键盘布局或特殊键位映射的情况下,nativeModifiers 可以提供这些详细信息。
- quint32 nativeScanCode() const
返回键的本地扫描码。
返回按键的原生扫描码。扫描码是指键盘上每个键的唯一标识符,与按键的字符输出无关。扫描码对于识别物理按键位置很有用,而不是按键代表的字符。
应用场景:用于游戏开发或需要精确控制键盘物理按键的应用程序中。例如,当开发跨平台的游戏时,使用扫描码可以确保无论键盘布局如何,按键映射都保持一致。
- quint32 nativeVirtualKey() const
返回键的本地虚拟键码。
返回与事件相关联的键的原生虚拟键码。虚拟键码是操作系统用于识别特定按键的一个代码,与按键的物理位置无关,通常与按键的功能有关。
应用场景:在需要处理特定按键功能,特别是在进行操作系统级快捷键处理或集成操作系统特有功能时使用。例如,在处理全局热键或与特定系统功能绑定的快捷键时,可以使用虚拟键码来确保正确识别按键。
- QString text() const
返回与事件相关联的文本。对于可打印字符,这将是字符本身。对于控制键,这可能是空字符串。
窗口事件
- QResizeEvent
- const QSize &oldSize() const:返回之前的窗体大小
- const QSize &size() const:返回当前窗体大小
- QPaintEvent
构造函数
-
QPaintEvent(const QRect &paintRect)
这个构造函数创建一个 QPaintEvent 实例,其中 paintRect 参数指定了需要重绘的矩形区域。这个矩形是相对于窗口的坐标系统。 -
QPaintEvent(const QRegion &paintRegion)
这个构造函数创建一个 QPaintEvent 实例,其中 paintRegion 参数指定了需要重绘的区域。与 QRect 相比,QRegion 可以表示更复杂的形状,包括多个不连续的矩形区域。
成员函数
- const QRect &rect() const
这个函数返回一个引用,指向表示需要重绘的矩形区域的 QRect。即使原始的 QPaintEvent 是用 QRegion 构造的,rect() 也会返回一个矩形,这个矩形是覆盖整个 QRegion 的最小矩形。 - const QRegion ®ion() const
这个函数返回一个引用,指向表示需要重绘的区域的 QRegion。如果原始的 QPaintEvent 是用 QRect 构造的,region() 也会返回一个区域,这个区域恰好覆盖了构造函数中指定的矩形。
动作事件
QActionEvent 是 Qt 中用于处理与动作相关的事件的类,特别是在动作(QAction)被添加到、从菜单或工具栏中移除,或者在这些容器中的位置发生变化时。这些事件对于动态更新用户界面非常有用,特别是当应用程序的某些功能被启用或禁用时,或者需要根据特定条件调整命令的可用性和顺序时。
构造函数
QActionEvent(int type, QAction *action, QAction *before = nullptr)
这个构造函数用于创建一个 QActionEvent 实例。
type: 事件的类型,可以是 QEvent::ActionAdded、QEvent::ActionRemoved 或 QEvent::ActionChanged。
action: 与事件相关联的 QAction 对象。这是被添加、移除或改变的动作。
before: (可选)指定新动作应该插入到哪个现有动作之前。如果为 nullptr,则动作被添加到容器的末尾。这个参数仅在动作被添加到容器中时有意义。
成员函数
QAction *action() const
返回与事件相关联的动作对象。无论是动作被添加、移除还是改变,这个函数都会返回那个具体的 QAction 对象。
QAction *before() const
返回新动作应该插入到哪个现有动作之前的信息。如果返回值为 nullptr,表示新动作被添加到了容器的末尾。这在处理 QEvent::ActionAdded 事件时特别有用,因为它允许您精确地控制动作在菜单或工具栏中的位置。
拖放事件
QDragLeaveEvent继承QEvent
QDragEnterEvent继承QDragMoveEvent继承QDropEvent继承QEvent
- QDropEvent
QDropEvent类在Qt中用于处理拖放操作的最后阶段,即当用户在目标位置释放(drop)拖动的对象时触发。这个事件包含了所有必要的信息,以便应用程序可以决定如何处理被放下(dropped)的数据。
构造函数
QDropEvent(const QPointF &pos, Qt::DropActions actions, const QMimeData *data, Qt::MouseButtons buttons, Qt::KeyboardModifiers modifiers, QEvent::Type type = Drop)
创建一个QDropEvent实例。
pos: 放下位置的坐标(浮点型,提供更精确的位置信息)。
actions: 描述可能的拖放操作类型(例如,复制、移动)。
data: 拖放操作中传递的数据。
buttons: 触发拖放事件时按下的鼠标按钮。
modifiers: 触发事件时激活的键盘修饰键。
type: 事件的类型,默认为Drop。
成员函数
void acceptProposedAction()
接受事件中建议的拖放操作。这通常在目标同意执行拖放建议的操作时使用。
Qt::DropAction dropAction() const
返回实际的拖放操作类型。
Qt::DropAction 枚举值:
Qt::CopyAction:表示一个复制操作,即将数据从源复制到目的地,源数据保持不变。
Qt::MoveAction:表示一个移动操作,即将数据从源移动到目的地,源数据随后被删除或在原位置无效。
Qt::LinkAction:表示创建一个到数据的链接,而不是复制或移动数据本身。
Qt::ActionMask:用作掩码,以从给定的动作中提取基本动作类型。
Qt::TargetMoveAction:指示目标应对数据执行移动操作,这通常在内部拖放操作中使用,当数据实际上并未离开应用程序。
Qt::IgnoreAction:表示忽略拖放操作,不对数据执行任何操作。
Qt::KeyboardModifiers keyboardModifiers() const
返回在放下时激活的键盘修饰键。
const QMimeData *mimeData() const
返回与事件相关联的MIME数据对象,这是传递的实际数据。
Qt::MouseButtons mouseButtons() const
返回在放下事件发生时按下的鼠标按钮。
QPoint pos() const 和 const QPointF &posF() const
返回放下位置的坐标。pos()返回一个QPoint对象,而posF()返回一个更精确的QPointF对象。
Qt::DropActions possibleActions() const
返回所有可能的拖放操作。
Qt::DropAction proposedAction() const
返回建议的拖放操作,这是拖动源建议的默认操作。
void setDropAction(Qt::DropAction action)
设置拖放操作的类型。这允许在接收端改变建议的操作类型。
QObject *source() const
返回发起拖放操作的源对象。
- QDragMoveEvent
QDragMoveEvent 类是 Qt 框架中用于处理拖拽过程中的移动事件的一个类。这个事件在拖拽操作进行中,当鼠标移动到接收拖拽的窗口或控件上时被触发。QDragMoveEvent 继承自 QDropEvent,提供了一系列的函数来管理拖拽过程中的行为和反馈。
构造函数
QDragMoveEvent(const QPoint &pos, Qt::DropActions actions, const QMimeData *data, Qt::MouseButtons buttons, Qt::KeyboardModifiers modifiers, QEvent::Type type = DragMove)
这个构造函数创建一个 QDragMoveEvent 对象。
pos:事件发生的位置。
actions:指定可能的拖拽操作(如复制、移动)。
data:拖拽的数据。
buttons:触发事件时按下的鼠标按钮。
modifiers:触发事件时激活的键盘修饰键。
type:事件的类型,默认是 DragMove。
析构函数
virtual ~QDragMoveEvent()
虚析构函数确保删除 QDragMoveEvent 对象时,派生类的析构函数也会被调用。
成员函数
void accept(const QRect &rectangle) 和 void accept()
通过调用 accept() 函数,可以接受拖拽操作。这意味着您允许放下发生。accept(const QRect &rectangle) 版本允许指定一个矩形区域,表示只有在这个区域内放下动作才被接受。
QRect answerRect() const
返回上一次调用 accept(const QRect &rectangle) 或 ignore(const QRect &rectangle) 时传递的矩形区域。如果没有提供矩形,则返回一个空的 QRect。
void ignore(const QRect &rectangle) 和 void ignore()
通过调用 ignore() 函数,可以忽略拖拽操作。这意味着当前控件不接受放下操作。与 accept() 类似,ignore(const QRect &rectangle) 允许指定一个矩形区域,表示在这个区域内的放下动作被忽略。
使用场景
QDragMoveEvent 主要用于拖拽操作过程中的动态反馈。例如,在文件浏览器中,当用户拖拽一个文件到文件夹上时,可以通过更改文件夹的外观来显示它可以接受放下操作。通过处理 QDragMoveEvent,可以在事件发生的位置显示一个高亮区域,或者显示一个指示可以放下的图标。
QMimeData
QMimeData 类是 Qt 框架中用于处理 MIME(多用途互联网邮件扩展)类型数据的一个类。它用于在应用程序内部以及应用程序之间传递数据,特别是在实现拖放和剪贴板操作时。QMimeData 可以存储多种类型的数据,包括文本、URLs、颜色、HTML、图片等,使得它成为在这些上下文中传递复杂数据的理想选择。
构造函数和析构函数
QMimeData(): 创建一个新的 QMimeData 对象。
virtual ~QMimeData(): 虚析构函数,确保派生类能够正确清理。
数据管理
void clear(): 清除对象中的所有数据。
void setData(const QString &mimeType, const QByteArray &data): 设置指定 MIME 类型的数据。
void removeFormat(const QString &mimeType): 移除指定 MIME 类型的数据。
QByteArray data(const QString &mimeType) const: 返回指定 MIME 类型的数据。
QStringList formats() const: 返回对象中存在的所有 MIME 类型。
数据检查
bool hasFormat(const QString &mimeType) const: 检查对象是否包含指定 MIME 类型的数据。
bool hasColor() const: 检查对象是否包含颜色数据。
bool hasHtml() const: 检查对象是否包含 HTML 数据。
bool hasImage() const: 检查对象是否包含图片数据。
bool hasText() const: 检查对象是否包含文本数据。
bool hasUrls() const: 检查对象是否包含 URL 列表。
数据设置
void setColorData(const QVariant &color): 设置颜色数据。
void setHtml(const QString &html): 设置 HTML 数据。
void setImageData(const QVariant &image): 设置图片数据。
void setText(const QString &text): 设置文本数据。
void setUrls(const QList &urls): 设置 URL 列表。
数据获取
QVariant colorData() const: 获取颜色数据。
QString html() const: 获取 HTML 数据。
QVariant imageData() const: 获取图片数据。
QString text() const: 获取文本数据。
QList urls() const: 获取 URL 列表。
使用场景
QMimeData 的一个典型使用场景是实现拖放操作。当用户从一个组件拖动数据到另一个组件时,源组件可以通过创建一个 QMimeData 对象并使用 setData 方法来填充数据,然后将其传递给拖放操作。目标组件接收到拖放事件后,可以通过调用 event->mimeData() 来访问这些数据,并根据需要处理它们。
此外,QMimeData 也用于剪贴板操作。应用程序可以通过 QClipboard 类的 setMimeData 方法来设置剪贴板的内容,并通过 mimeData 方法来检索剪贴板的内容。
通过这种方式,QMimeData 提供了一种灵活且强大的方法来在 Qt 应用程序中处理和传递多种类型的数据。
事件类型
- QEvent::None (0): 未定义事件。
- QEvent::Timer (1): 计时器事件。
- QEvent::MouseButtonPress (2): 鼠标按键按下。
- QEvent::MouseButtonRelease (3): 鼠标按键释放。
- QEvent::MouseButtonDblClick (4): 鼠标双击。
- QEvent::MouseMove (5): 鼠标移动。
- QEvent::KeyPress (6): 键盘按键按下。
- QEvent::KeyRelease (7): 键盘按键释放。
- QEvent::FocusIn (8): 获得焦点。
- QEvent::FocusOut (9): 失去焦点。
- QEvent::Enter (10): 鼠标进入窗口。
- QEvent::Leave (11): 鼠标离开窗口。
- QEvent::Paint (12): 重绘事件。
- QEvent::Move (13): 窗口或控件移动。
- QEvent::Resize (14): 窗口或控件大小改变。
- QEvent::Create (15): 控件创建。
- QEvent::Destroy (16): 控件销毁。
- QEvent::Show (17): 控件显示。
- QEvent::Hide (18): 控件隐藏。
- QEvent::Close (19): 请求关闭窗口。
- QEvent::Quit (20): 应用程序退出。
- QEvent::ParentChange (21): 父对象改变。。
- QEvent::ThreadChange (22): 线程改变。
- QEvent::FocusAboutToChange(23):这个事件在一个窗口或控件即将改变焦点时发生
- QEvent::WindowActivate (24): 窗口激活。
- QEvent::WindowDeactivate (25): 窗口停用。
- QEvent::ShowToParent (26): 控件对父控件显示。
- QEvent::HideToParent (27): 控件对父控件隐藏。
- QEvent::Wheel (31): 鼠标滚轮滚动。
- QEvent::WindowTitleChange (33): 窗口标题改变。
- QEvent::WindowIconChange (34): 窗口图标改变。
- QEvent::ApplicationWindowIconChange (35): 应用程序窗口图标改变。
- QEvent::ApplicationFontChange (36): 应用程序字体改变。
- QEvent::ApplicationLayoutDirectionChange (37): 应用程序布局方向改变。
- QEvent::ApplicationPaletteChange (38): 应用程序调色板改变。
- QEvent::PaletteChange (39): 调色板改变。
- QEvent::Clipboard (40): 剪贴板内容改变。
- QEvent::Speech (42): 语音事件。
- QEvent::MetaCall (43): 元调用。
- QEvent::SockAct (50): 套接字激活。
- QEvent::WinEventAct (132): Windows消息事件。
- QEvent::DeferredDelete (52): 延迟删除事件。
- QEvent::DragEnter (60): 拖动进入事件。
- QEvent::DragMove (61): 拖动移动事件。
- QEvent::DragLeave (62): 拖动离开事件。
- QEvent::Drop (63): 拖放事件。
QEvent::ChildAdded (68): 子对象添加。
QEvent::ChildPolished (69): 子对象被打磨。
QEvent::ChildRemoved (71): 子对象被移除。
QEvent::ActionAdded: 当一个动作(QAction)被添加到控件时发送。
QEvent::ActionRemoved: 当一个动作被从控件中移除时发送。
QEvent::ActionChanged: 当一个动作的状态发生改变时发送,例如,它被禁用或启用。