当前位置: 首页 > article >正文

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

  • 公开视频 -> 链接点击跳转公开课程
  • 博客首页 -> ​​​链接点击跳转博客主页

目录

事件处理机制概述

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.kler.cn/a/506604.html

相关文章:

  • ROS1学习记录
  • docker 部署 MantisBT
  • 人工智能之深度学习-[1]-了解深度学习
  • 【学习笔记】Macbook管理多个不同的Python版本
  • word-break控制的几种容器换行行为详解
  • Hive集群的安装准备
  • 装饰器模式详解(附代码案例和源码分析)
  • phaserjs+typescript游戏开发之camera实现
  • SQL正则表达式用法大全以及如何利用正则表达式处理复杂数据
  • DCU异构程序--矩阵乘
  • mysql zabbix监控方法
  • JAVA:责任链模式(Chain of Responsibility Pattern)的技术指南
  • 基于springboot的rmi远程调用
  • API调用过程中遇到错误的解决方案
  • 清除前端缓存的方式
  • OpenCV相机标定与3D重建(54)解决透视 n 点问题(Perspective-n-Point, PnP)函数solvePnP()的使用
  • python助力WRF自动化运行
  • JavaEE之常见的锁策略
  • Linux 音视频入门到实战专栏(音频篇)基于alsa api的音频播放/录制流程
  • 2024年细讲前端工程化 万字总结!!
  • D3.js及实例应用
  • Apache搭建https服务器
  • Windows上安装和配置Tabby终端工具并实现远程ssh连接内网服务器
  • C#中字符串方法
  • react native学习【6.1】——列表视图
  • 【Qt】03-页面切换