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);
}
相关推荐
LUCIAZZZ4 小时前
简单的SQL语句的快速复习
java·数据库·sql
Elastic 中国社区官方博客6 小时前
使用真实 Elasticsearch 进行高级集成测试
大数据·数据库·elasticsearch·搜索引擎·全文检索·jenkins·集成测试
@_@哆啦A梦6 小时前
Redis 基础命令
java·数据库·redis
fajianchen6 小时前
MySQL 索引存储结构
数据库·mysql
想做富婆6 小时前
oracle: 多表查询之联合查询[交集intersect, 并集union,差集minus]
数据库·oracle·联合查询
xianwu5438 小时前
反向代理模块jmh
开发语言·网络·数据库·c++·mysql
Leven1995278 小时前
Flink (十三) :Table API 与 DataStream API 的转换 (一)
数据库·sql·flink
geovindu8 小时前
neo4j-community-5.26.0 create new database
数据库·mysql·neo4j
行十万里人生9 小时前
Qt事件处理:理解处理器、过滤器与事件系统
开发语言·git·qt·华为od·华为·华为云·harmonyos
黑金IT9 小时前
Python3 + Qt5:实现AJAX异步更新UI
qt·ui·ajax