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

QT鼠标、键盘事件

一、鼠标

鼠标点击 mousePressEvent

鼠标释放 mouseReleaseEvent

鼠标移动 mouseMoveEvent

鼠标双击 mouseDoubleClickEvent

鼠标滚轮 QWheelEvent

二、键盘

键盘按下 keyPressEvent

键盘松开keyReleaseEvent


一、鼠标

#include <QMouseEvent> 

鼠标点击 mousePressEvent

void Widget::mousePressEvent(QMouseEvent *event){  if(event->button() == Qt::RightButton){}if(event->button() == Qt::LeftButton){}
}

鼠标释放 mouseReleaseEvent

void Widget::mouseReleaseEvent(QMouseEvent *event){ if(event->button() == Qt::RightButton){}if(event->button() == Qt::LeftButton){}
}

鼠标移动 mouseMoveEvent

void Widget::mouseMoveEvent(QMouseEvent *event){this->move(QPoint());
}注:
event->globalPos();//光标的位置
QCursor::pos();//光标的位置
this->pos();//界面左上角位置

鼠标双击 mouseDoubleClickEvent

void Widget::mouseDoubleClickEvent(QMouseEvent *event)

鼠标滚轮 QWheelEvent

void Widget::wheelEvent(QWheelEvent* event)
{
//使用 angleDelta() 来获取滚动角度增量QPoint angleDelta = event->angleDelta();if (!angleDelta.isNull()) {int yDelta = angleDelta.y(); // 获取垂直方向上的增量if (yDelta > 0) {// 向上滚动qDebug() << "UP";}else if (yDelta < 0) {// 向下滚动qDebug() << "DOWN";}//或者使用 pixelDelta() 来获取滚动像素增量QPoint pixelDelta = event->pixelDelta();if (!pixelDelta.isNull()) {int yDelta = pixelDelta.y(); // 获取垂直方向上的增量if (yDelta > 0) {}else if (yDelta < 0) {}}
}

注:qt5是event->delta();

二、键盘

#include <QKeyEvent> 

键盘按下 keyPressEvent

void Widget::keyPressEvent(QKeyEvent *event){
//特殊按键 如按下CTRLif(event->modifiers() == Qt::CTRL){}//普通按键 如按下Aif(event->key() == Qt::Key_A){}else{  QWidget::keyPressEvent(event);//保持基类默认}
}

键盘松开 keyReleaseEvent

void Widget::keyReleaseEvent(QKeyEvent *event){switch (event->key()) {case Qt::Key_Up:if (!event->isAutoRepeat()) {} //使用isAutoRepeat是为了识别自动重复,即事件发生一次就执行一次功能break;case Qt::Key_Left:if (!event->isAutoRepeat()) {}break;default:break;}// 调用基类的方法来处理默认行为QWidget::keyReleaseEvent(event);
}

注:isAutoRepeat:

如 
if (!event->isAutoRepeat()) {jump();}

只会在按下一次键盘后执行一次jump函数,在游戏中就只会让角色跳跃一次。

http://www.lryc.cn/news/519660.html

相关文章:

  • Ceph分布式存储集群,不仅仅是一个简单的对象存储解决方案
  • DSP+Simulink——点亮LED灯(TMSDSP28379D)超详细
  • Linux 环境下编译安装 OpenCV 4.8.x
  • phpenc加密程序源码
  • 学英语学Elasticsearch:04 Elastic integrations 工具箱实现对第三方数据源的采集、存储、可视化,开箱即用
  • 2024.10.12 校招 实习 内推 面经
  • ios越狱脚本巨魔商店安装教程
  • 浅谈容灾技术方案详解
  • 时序数据库InfluxDB—介绍与性能测试
  • Python的循环
  • 【机器学习】聚类评价指标之福尔克斯–马洛斯指数(Fowlkes–Mallows Index, FMI)
  • 分享一次面试经历
  • 网络攻击行为可视化分析系统【数据分析 + 可视化】
  • Qt 智能指针
  • CODESYS MODBUS TCP通信(禾川Q1 PLC作为MODBUS TCP从站)
  • 10.STM32F407ZGT6-内部温度传感器
  • 运维安全中心(堡垒机)
  • Linux OOM | Early OOM | 进程监视
  • 【2024年华为OD机试】(A卷,100分)- 等和子数组最小和(Java JS PythonC/C++)
  • NFS服务
  • RabbitMQ 交换机、队列和路由键的命名规范
  • 腾讯云AI代码助手编程挑战赛-刑说
  • 【测试】持续集成CI/CD
  • 阿里云直播Web
  • DuckDB:PRAGMA语句动态配置数据库行为
  • GO通过SMTP协议发送邮件
  • 轻量自高斯注意力机制LSGAttention模型详解及代码复现
  • 解读若依框架中的`@Excel` 和 `@Excels` 注解
  • 云商城--基础数据处理和分布式文件存储
  • 六十九:基于openssl实战验证RSA