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);
}
相关推荐
一 乐37 分钟前
二手交易平台|基于springboot + vue二手交易平台(源码+数据库+文档)
java·数据库·vue.js·spring boot·小程序
SelectDB1 小时前
同等资源下 Apache Doris 4.2 vs StarRocks 4.1.1:1TB SSB 与 TPC-H 性能实测
大数据·数据库·数据分析
这个DBA有点耶1 小时前
数据库集群与分布式架构:三条技术路线对比、金仓KES RAC实测数据与决策框架
数据库·程序员·架构
MayBaymax1 小时前
MongoDB 索引与事务
java·数据库·mongodb
SelectDB1 小时前
Doris vs ClickHouse:企业 OLAP 走向下一阶段,两种技术路线如何选择
大数据·数据库·数据分析
vx-程序开发2 小时前
【计算机毕设】django校园跑腿服务系统83141
java·数据库·vue.js·spring boot·spring·elasticsearch·django
一 乐2 小时前
养老院管理系统|基于springboot + vue养老院管理系统(源码+数据库+文档)
java·数据库·vue.js·spring boot·毕业设计
江湖人称菠萝包2 小时前
【Qt】《Qt 5.9 C++开发指南》笔记-Chapter9-Qt Charts
笔记·qt·qt5
扶尔魔ocy2 小时前
【QT android】环境安装及第一个QT项目
qt·andriod开发
这个DBA有点耶3 小时前
InnoDB页结构深入:页分裂、页合并、填充因子——B+树底层机制全解析
数据库·mysql·架构