QT键盘和鼠标事件

这些事件都在QWidget 中的保护成员方法中

都是虚函数在头文件中声明了 需要类外重现实现

如果头文件中声明 类外无实现就会报错

复制代码
void Widget::keyPressEvent(QKeyEvent *event)
{
    switch (event->key()) {//获取按键
    case Qt::Key_W://按键w
        qDebug()<<"按下w";

        break;
    case Qt::Key_S:
  qDebug()<<"按下S";
        break;
    }
    qDebug()<<"按下";
}

void Widget::keyReleaseEvent(QKeyEvent *event)
{
    switch (event->key()) {//获取按键
    case Qt::Key_Up://获取小键盘
        qDebug()<<"按下shang";

        break;
    case Qt::Key_Down:
        qDebug()<<"按下下";
        break;
    case Qt::Key_Left:
        qDebug()<<"按下下";
        break;
    case Qt::Key_Right:
        qDebug()<<"按下右";
        break;
    }

鼠标进入和离开事件 鼠标进入窗口 和离开窗口时

判断是左键还是右键

鼠标按下

event->pos event->globalpos

位置

使用键盘事件控制图片的移动:

.h文件

复制代码
#ifndef MYWIDGET_H
#define MYWIDGET_H

#include <QWidget>
#include <QPixmap>
#include <QPoint>

class MyWidget : public QWidget
{
    Q_OBJECT

public:
    explicit MyWidget(QWidget *parent = nullptr);

protected:
    void keyPressEvent(QKeyEvent *event) override;
    void paintEvent(QPaintEvent *event) override;

private:
    QPixmap m_image; // 存储图片
    QPoint m_position; // 图片的位置
};

#endif // MYWIDGET_H

.cpp文件

复制代码
#include "widget.h"
#include "ui_widget.h"

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget),
    m_image("://png_icon/dog.png"),
m_position(50,50)
{
    ui->setupUi(this);
    setFixedSize(400,600);

}

Widget::~Widget()
{
    delete ui;
}
void  Widget:: keyPressEvent(QKeyEvent *event)
{
    int moveStep = 10; // 移动步长
    switch (event->key()) {
    case Qt::Key_W:
        m_position.ry() -= moveStep;
        break;
    case Qt::Key_S:
        m_position.ry() += moveStep;
        break;
    case Qt::Key_A:
        m_position.rx() -= moveStep;
        break;
    case Qt::Key_D:
        m_position.rx() += moveStep;
        break;
    default:
        QWidget::keyPressEvent(event);
        return;
    }

    // 限制移动范围
    m_position.setX(qBound(0, m_position.x(), width() - m_image.width()));
    m_position.setY(qBound(0, m_position.y(), height() - m_image.height()));

    update(); // 触发重绘
}
 void Widget:: paintEvent(QPaintEvent *event)
{
     QPainter painter(this);
     painter.drawPixmap(m_position, m_image);
}
相关推荐
●VON8 小时前
鸿蒙Flutter实战:分类管理页BottomSheet CRUD
数据库·flutter·华为·harmonyos·鸿蒙
Cosolar8 小时前
Chroma向量库面试学习指南
数据库·人工智能·面试·职场和发展·数据库架构
eggcode9 小时前
【Qt学习】Linux(ARM架构)在线安装Qt6.x
linux·qt·学习·arm
企服AI产品测评局9 小时前
Agent适配信创环境实测:企业级自动化如何实现国产操作系统与数据库全兼容?
运维·数据库·人工智能·ai·chatgpt·自动化
cfm_291410 小时前
Redis数据安全性解析
数据库·redis·缓存
DIY源码阁10 小时前
JavaSwing学生成绩管理系统 - MySQL版
java·数据库·mysql·eclipse
NiceCloud喜云11 小时前
Claude Code Routines 实战:三种触发器跑通云端自动化编码
android·运维·数据库·人工智能·自动化·json·飞书
辞忧九千七11 小时前
Redis 单机一主二从主从复制完整搭建指南
数据库·redis·缓存
lzhdim11 小时前
SQL 入门 16:SQL 事务隔离级别与死锁解析(易懂)
数据库·sql
AI 小老六12 小时前
Claude Code 如何压缩上下文:Microcompact、Prompt Cache 与 cache_edits 工程拆解
数据库·人工智能·ai·语言模型·架构·系统架构