Windows图形界面(GUI)-QT-C/C++ - Qt键盘与鼠标事件处理详解

news/2025/1/17 7:30:49/
  • 公开视频 -> 链接点击跳转公开课程
  • 博客首页 -> ​​​链接点击跳转博客主页

目录

事件处理机制概述

MFC与Qt事件处理对比

MFC事件处理

Qt事件处理

Qt事件传递机制

鼠标事件详解

鼠标事件类型

事件处理函数

​编辑

鼠标相关信息与反馈

键盘事件详解

键盘事件类型

事件处理示例

​编辑

键盘相关信息与反馈

常见按键代码和修饰键

键代码

修饰键


事件处理机制概述

MFC与Qt事件处理对比

特性MFCQt
事件类型窗口消息(如WM_XXX系列)事件对象(如QMouseEvent
处理方式消息映射机制事件处理函数
扩展性较为固定高度灵活,支持扩展
响应机制基于消息循环基于信号槽与事件机制
MFC事件处理
  • 于消息映射机制
  • 使用窗口消息(WM_*)
  • 通过宏定义映射消息到处理函数
BEGIN_MESSAGE_MAP(CMyWindow, CWnd)  ON_WM_MOUSEMOVE()  ON_WM_LBUTTONDOWN()  
END_MESSAGE_MAP()
Qt事件处理
  • 基于对象化的事件系统
  • 使用事件类(QEvent子类)
  • 通过重写虚函数处理事件
class MyWidget : public QWidget {  
protected:  void mouseMoveEvent(QMouseEvent* event) override;  void keyPressEvent(QKeyEvent* event) override;  
};

Qt事件传递机制

bool QWidget::event(QEvent* e) {  switch(e->type()) {  case QEvent::MouseButtonPress:  mousePressEvent(static_cast<QMouseEvent*>(e));  return true;  // ...其他事件处理  }  return QObject::event(e);  
}

鼠标事件详解

鼠标事件类型

  1. 按键事件
  2. 移动事件
事件类型描述
QMouseEvent::MouseButtonPress鼠标按键按下事件
QMouseEvent::MouseButtonRelease鼠标按键释放事件
QMouseEvent::MouseButtonDblClick鼠标按键双击事件
QMouseEvent::MouseMove鼠标移动事件

事件处理函数

  • mousePressEvent(QMouseEvent *event):处理鼠标按下事件。
  • mouseReleaseEvent(QMouseEvent *event):处理鼠标释放事件。
  • mouseDoubleClickEvent(QMouseEvent *event):处理鼠标双击事件。
  • mouseMoveEvent(QMouseEvent *event):处理鼠标移动事件。
  void mouseMoveEvent(QMouseEvent *event) override{if (event->buttons() & Qt::LeftButton) {qDebug() << "鼠标移动 - 左键按下位置:" << event->pos();} else if (event->buttons() & Qt::RightButton) {qDebug() << "鼠标移动 - 右键按下位置:" << event->pos();}}void mousePressEvent(QMouseEvent *event) override{qDebug() << "鼠标按下:" << event->pos();}void mouseReleaseEvent(QMouseEvent *event) override{qDebug() << "鼠标释放:" << event->pos();}void mouseDoubleClickEvent(QMouseEvent *event) override{qDebug() << "鼠标双击:" << event->pos();}

鼠标相关信息与反馈

方法/属性描述
QPoint pos()返回鼠标位置(相对窗口)
QPoint globalPos()返回鼠标位置(全局屏幕)
Qt::MouseButton button()返回触发事件的鼠标按键(如Qt::LeftButton
Qt::MouseButtons buttons()返回事件发生时所有按下的按键

键盘事件详解

键盘事件类型

  1. KeyPress (按键按下)
  2. KeyRelease (按键释放)
事件类型描述
QKeyEvent::KeyPress键盘按键按下事件
QKeyEvent::KeyRelease键盘按键释放事件

事件处理示例

  • keyPressEvent(QKeyEvent *event):处理键盘按下事件。
  • keyReleaseEvent(QKeyEvent *event):处理键盘释放事件。
    void keyPressEvent(QKeyEvent *event) override{if (event->modifiers() & Qt::ControlModifier) {if (event->key() == Qt::Key_C) {qDebug() << "检测到 Ctrl + C";}} else {qDebug() << "按键:" << event->text();}}void keyReleaseEvent(QKeyEvent *event) override{qDebug() << "键盘释放:" << event->text();}

键盘相关信息与反馈

方法/属性描述
int key()返回按键的键值(如Qt::Key_A
QString text()返回按键对应的文本字符
bool isAutoRepeat()检查事件是否由于按键的自动重复触发
Qt::KeyboardModifiers modifiers()返回所有按下的修饰键(如Shift, Ctrl等)

常见按键代码和修饰键

键代码

Qt 提供了丰富的键盘按键代码,通过 Qt::Key 枚举表示:

键值
A-ZQt::Key_A 到 Qt::Key_Z
0-9Qt::Key_0 到 Qt::Key_9
功能键Qt::Key_F1 到 Qt::Key_F12
方向键Qt::Key_LeftQt::Key_Right 等
其他键Qt::Key_SpaceQt::Key_ReturnQt::Key_Delete 等
修饰键

修饰键用于标识辅助按键(如Shift、Ctrl、Alt等),常见修饰键如下:

修饰键描述
Qt::ShiftModifierShift 键
Qt::ControlModifierCtrl 键
Qt::AltModifierAlt 键
Qt::MetaModifierMeta 键(Windows或Command键)

 


http://www.ppmy.cn/news/1563831.html

相关文章

台达、汇川伺服

台达 R、S、T 用 AC220V 时接 R、T&#xff0c;适用于 1.5kw 以下 DI、COM COM 接 24V&#xff0c;DI 接 0V 则使能。也可以反着来 DO、DO- DO 接 24V&#xff0c;DO- 使能时会输出 24V 新机上电/默认配置 报错 AL.013&#xff0c;DI8 急停报警&#xff0c;P2.017&#xff0…

机器学习中的凸函数和梯度下降法

一、凸函数 在机器学习中&#xff0c;凸函数 和 凸优化 是优化问题中的重要概念&#xff0c;许多机器学习算法的目标是优化一个凸函数。这些概念的核心思想围绕着优化问题的简化和求解效率。下面从简单直观的角度来解释。 1. 什么是凸函数&#xff1f; 数学定义 一个函数 f…

openharmony设备测试XTS测评用例开发指导

XTS测评用例开发指导 简介 XTS子系统是OpenHarmony兼容性测评套件的集合&#xff0c;当前包括acts&#xff08;application compatibility test suite&#xff09;应用兼容性测试套件&#xff0c;后续会拓展dcts&#xff08;device compatibility test suite&#xff09;设备…

如何在 Rocky Linux 上安装极狐GitLab?

本文分享如何在 Rocky Linux 操作系统上安装极狐GitLab。 相关资料 极狐GitLab 在各种操作系统下的安装指南官网文档 前提条件 一个安装了 Rocky Linux 操作系统的云服务器 可以查看 /etc/os-release 中的信息&#xff0c;确认操作系统信息&#xff1a; NAME"Rocky …

【蓝桥杯】Python算法——快速幂

零、前言 距离25年蓝桥杯还有大概三个月时间&#xff0c;接下来重点应该会放在蓝桥杯备考方向&#xff0c;一起努力&#xff0c;一起加油 一、快速幂 如何快速求 a b p a^bp abp&#xff1f;如果直接循环aaa…毫无疑问时间复杂度是很大的&#xff0c;那么怎么降低计算量呢&…

遥感原理及图像处理

第一章 绪论 1.1 遥感概述 &#xff08;1&#xff09;遥感 即遥远感知&#xff0c;是一种远距离的、非接触的目标探测技术和方法。 &#xff08;2&#xff09;主动遥感与被动遥感 ** 主动遥感** 由遥感器主动发射电磁波能量&#xff0c;并接收目标反射或散射回来的电磁波&…

Springboot集成Easy Rules引擎,实现一个商品优惠券系统

Easy Rules是一个轻量级的Java规则引擎&#xff0c;它允许开发者将业务规则从代码中解耦出来&#xff0c;使规则的管理和执行更加灵活。 现在让我们一起利用Spring Boot结合Easy Rules和MyBatis技术栈&#xff0c;可以实现一个高效且易于维护的优惠券系统例子。 1. 添加依赖项 …

【云岚到家】-day02-客户管理-认证授权

第二章 客户管理 1.认证模块 1.1 需求分析 1.基础概念 一般情况有用户交互的项目都有认证授权功能&#xff0c;首先我们要搞清楚两个概念&#xff1a;认证和授权 认证: 就是校验用户的身份是否合法&#xff0c;常见的认证方式有账号密码登录、手机验证码登录等 授权:则是该用…