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

devtools/2025/1/16 16:10:59/
  • 公开视频 -> 链接点击跳转公开课程
  • 博客首页 -> ​​​链接点击跳转博客主页

目录

事件处理机制概述

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/devtools/150992.html

相关文章

年底了,2025年培训预算怎么整?

培训预算不仅仅是年度计划的一部分&#xff0c;更是企业提升竞争力和适应市场变化的重要工具。年底了&#xff0c;2025年的培训预算是许多HR的重要任务之一。该怎么做明年的培训呢&#xff1f; 培训预算的参考数据 制定培训预算时&#xff0c;企业应参考行业内的平均数据和标杆…

K8S中的Pod生命周期之重启策略

三种策略 Kubernetes 中的 Pod 支持以下三种重启策略&#xff1a; Always&#xff1a; 描述&#xff1a;无论容器退出的原因是什么&#xff0c;都会自动重启容器。 默认值&#xff1a;如果未指定重启策略&#xff0c;Kubernetes 默认使用 Always。 OnFailure&#xff1a; 描…

STL——map

目录 map类 map的构造 map的增删查 map的数据修改 map类 Key就是map底层关键字的类型&#xff0c;T是map底层value的类型&#xff0c;set默认要求Key⽀持 ⼩于⽐较&#xff0c;如果不⽀持或者需要的话可以⾃⾏实现仿函数传给第⼆个模版参数&#xff0c;map底层存储数据的内存…

Ubuntu 系统支持高刷显示:探索与实践

Ubuntu 系统支持高刷显示&#xff1a;探索与实践 引言 随着技术的发展&#xff0c;显示器的刷新率从传统的60Hz逐渐提升到了120Hz、144Hz甚至更高。高刷新率屏幕能够提供更加流畅的视觉体验&#xff0c;尤其在游戏和动画播放中显得尤为重要。对于使用Ubuntu操作系统的用户来说…

pytorch张量分块投影示例代码

张量的投影操作 背景 张量投影 是深度学习中常见的操作,将输入张量通过线性变换映射到另一个空间。例如: Y=W⋅X+b 其中: X: 输入张量(形状可能为 (B,M,K),即批量维度、序列维度、特征维度)。W: 权重矩阵((K,N),将 K 维投影到 N 维)。b: 偏置向量(可选,(N,))。Y:…

硬件实用技巧:TPS54331DR横杠标识识别1引脚

若该文为原创文章&#xff0c;转载请注明原文出处 本文章博客地址&#xff1a;https://hpzwl.blog.csdn.net/article/details/145116969 长沙红胖子Qt&#xff08;长沙创微智科&#xff09;博文大全&#xff1a;开发技术集合&#xff08;包含Qt实用技术、树莓派、三维、OpenCV…

Zookeeper(1)什么是Zookeeper?

Zookeeper 是一个分布式协调服务&#xff0c;主要用于分布式应用中的协调工作。它提供了分布式应用所需的一些基础服务&#xff0c;如配置管理、命名服务、分布式同步、组服务等。Zookeeper 通过其简单且高效的原语&#xff08;如节点、会话、观察者等&#xff09;实现了这些功…

G1原理—G1的GC日志分析解读

1.TLAB的GC日志解读 (1)一套基本的参数设置 首先参数上要有一套基本的设置&#xff1a; -XX:InitialHeapSize128M -XX:MaxHeapSize128M -XX:UseG1GC -XX:PrintGCDetails -XX:PrintGCTimeStamps -XX:PrintTLAB -XX:UnlockExperimentalVMOptions -XX:G1LogLevelfinest -XX:MaxGCP…