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);
}
相关推荐
郝学胜-神的一滴2 分钟前
高并发秒杀系统设计全解:从需求拆解到Redis库存实战
java·数据库·redis·python·程序人生·缓存·php
m0_710890879 分钟前
2026 年进销存系统大盘点:国内外 5 款主流进销存软件对比与选型指南
java·数据库·mysql
码农小韩10 分钟前
QT学习记录(三)——C++学习基础(三)
开发语言·c++·qt·学习·算法·嵌入式软件
秋911 分钟前
一键安装mysql9.7.0(附脚本)
数据库
buhuizhiyuci12 分钟前
【QT-百日筑基篇】找寻安静的落脚处,选择合适的功法进行修炼-QT深度了解对象树的特性
开发语言·qt
iAm_Ike13 分钟前
JavaScript中模块化在游戏引擎开发中的资源调度作用
jvm·数据库·python
m0_7020365321 分钟前
Layui表单input框怎么设置只读或禁用
jvm·数据库·python
weixin_4597539421 分钟前
php怎么调用快手开放平台_php如何接入快手授权登录流程
jvm·数据库·python
weixin_4440129329 分钟前
SQL中如何实现基于条件的批量逻辑删除_过滤与更新状态位
jvm·数据库·python
萤萤七悬35 分钟前
【人工智能训练师3级】考试准备(2026)三、实操题1.1.3-3.2.5
前端·数据库·人工智能