[鼠标点击 mousePressEvent](#鼠标点击 mousePressEvent)
[鼠标释放 mouseReleaseEvent](#鼠标释放 mouseReleaseEvent)
[鼠标移动 mouseMoveEvent](#鼠标移动 mouseMoveEvent)
[鼠标双击 mouseDoubleClickEvent](#鼠标双击 mouseDoubleClickEvent)
[鼠标滚轮 QWheelEvent](#鼠标滚轮 QWheelEvent)
[键盘按下 keyPressEvent](#键盘按下 keyPressEvent)
一、鼠标
#include <QMouseEvent>
鼠标点击 mousePressEvent
void Widget::mousePressEvent(QMouseEvent *event){
if(event->button() == Qt::RightButton){}
if(event->button() == Qt::LeftButton){}
}
鼠标释放 mouseReleaseEvent
void Widget::mouseReleaseEvent(QMouseEvent *event){
if(event->button() == Qt::RightButton){}
if(event->button() == Qt::LeftButton){}
}
鼠标移动 mouseMoveEvent
void Widget::mouseMoveEvent(QMouseEvent *event){
this->move(QPoint());
}
注:
event->globalPos();//光标的位置
QCursor::pos();//光标的位置
this->pos();//界面左上角位置
鼠标双击 mouseDoubleClickEvent
void Widget::mouseDoubleClickEvent(QMouseEvent *event)
鼠标滚轮 QWheelEvent
void Widget::wheelEvent(QWheelEvent* event)
{
//使用 angleDelta() 来获取滚动角度增量
QPoint angleDelta = event->angleDelta();
if (!angleDelta.isNull()) {
int yDelta = angleDelta.y(); // 获取垂直方向上的增量
if (yDelta > 0) {
// 向上滚动
qDebug() << "UP";
}
else if (yDelta < 0) {
// 向下滚动
qDebug() << "DOWN";
}
//或者使用 pixelDelta() 来获取滚动像素增量
QPoint pixelDelta = event->pixelDelta();
if (!pixelDelta.isNull()) {
int yDelta = pixelDelta.y(); // 获取垂直方向上的增量
if (yDelta > 0) {}
else if (yDelta < 0) {}
}
}
注:qt5是event->delta();
二、键盘
#include <QKeyEvent>
键盘按下 keyPressEvent
void Widget::keyPressEvent(QKeyEvent *event){
//特殊按键 如按下CTRL
if(event->modifiers() == Qt::CTRL){}
//普通按键 如按下A
if(event->key() == Qt::Key_A){}
else{
QWidget::keyPressEvent(event);//保持基类默认
}
}
键盘松开 keyReleaseEvent
void Widget::keyReleaseEvent(QKeyEvent *event){
switch (event->key()) {
case Qt::Key_Up:
if (!event->isAutoRepeat()) {} //使用isAutoRepeat是为了识别自动重复,即事件发生一次就执行一次功能
break;
case Qt::Key_Left:
if (!event->isAutoRepeat()) {}
break;
default:
break;
}
// 调用基类的方法来处理默认行为
QWidget::keyReleaseEvent(event);
}
注:isAutoRepeat:
如
if (!event->isAutoRepeat()) {
jump();
}
只会在按下一次键盘后执行一次jump函数,在游戏中就只会让角色跳跃一次。