这些事件都在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); }
复制