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);
}
相关推荐
FfHUCisI20 分钟前
Golang database/sql 标准库基础
数据库·sql·golang
zhanghaha131440 分钟前
Python进阶教程:13_math 模块 —— 新手完全指南
数据库·python·机器学习
__zRainy__1 小时前
Node系列 · 数据库:单表查询
数据库·后端·mysql·node.js
xcLeigh1 小时前
聊聊数据库迁移工具怎么从单机走向“云+端+服务”,KDMS架构拆解
数据库·架构·数据库迁移·kes·kdms·架构拆解
St_rive1 小时前
selenium cookie的处理
数据库·selenium·测试工具
辻弋2012 小时前
一键优化电源计划、游戏模式、独显强制、禁用后台录制——DeltaForceBooster专治三角洲行动卡顿掉帧,所有改动可一键还原
服务器·数据库·windows·游戏·电脑·php
zlinear数据采集卡2 小时前
数据采集卡从入门到精通(38):上位机开发实战——Python/QT/LabVIEW的技术选型与分层架构
python·单片机·嵌入式硬件·qt·fpga开发·开源·labview
Wang's Blog2 小时前
PostgreSQL笔记51: 基于 pgvector 构建企业级智能问答系统
数据库·笔记·postgresql
我星期八休息3 小时前
Linux—五种IO模型与非阻塞IO
linux·运维·服务器·网络·数据库·网络协议
SQL-First布道者3 小时前
全面解构传统持久层框架,拥抱真正的 SQL-First
java·数据库·spring boot·sql·spring·mybatis·spring jdbc