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

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){
//特殊按键 如按下CTRL

  if(event->modifiers() == Qt::CTRL){}

//普通按键 如按下A

  if(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.kler.cn/a/472611.html

相关文章:

  • 腾讯云AI代码助手编程挑战赛-图片转换工具
  • Vscode辅助编码AI神器continue插件
  • 基于LabVIEW的BeamGage自动化接口应用
  • Cursor无限续杯——解决Too many free trials.
  • 基于高斯混合模型的数据分析及其延伸应用(具体代码分析)
  • php 多进程那点事,用 swoole 如何解决呢 ?
  • JavaAPI.02.包装类与正则表达式
  • 在vue3项目中利用自定义ref实现防抖
  • C++和Python中负数取余结果的区别
  • imageio 图片转mp4 保存mp4
  • 深度学习从入门到实战——卷积神经网络原理解析及其应用
  • js 根据条件判断样式
  • ElasticSearch内存占用率过高怎么办?
  • Java中将特征向量转换为矩阵的实现
  • CentOS 8 系统中添加 4G 大小的swap(交换空间)
  • 如何理解支持向量回归
  • 滑动变阻器的三种连接方式
  • linux中给自己编译的模块签名
  • element-ui下拉输入框+resetFields无法回显
  • 【物联网原理与运用】知识点总结(上)
  • node-sass@4.14.1报错的最终解决方案分享
  • Markdown中状态图的用法
  • Spring Boot教程之五十二:CrudRepository 和 JpaRepository 之间的区别
  • 一个个顺序挨着来 - 责任链模式(Chain of Responsibility Pattern)
  • LabVIEW之树形控件
  • el-table 自定义表头颜色