gpt4 book ai didi

c++ - 在 Qt C++ 中使用多个键

转载 作者:太空狗 更新时间:2023-10-29 21:20:45 25 4
gpt4 key购买 nike

我正在构建“坦克”游戏,我在其中使用按键事件在 map 上运行我的坦克。实际上我一次只能使用一把 key ,但我需要有能力 f.e.同时上去和离开。

这是我的单键事件代码:

switch(event->key())
{
case Qt::Key_Up:
if(!ui->widget->playerList[playerID]->canMove(0.3, 20, 20, -20, -20, 1.5)) return;
ui->widget->playerList[playerID]->move(0.3);
ui->widget->updateGL();
break;
case Qt::Key_Down:
if(!ui->widget->playerList[playerID]->canMove(-0.2, 20, 20, -20, -20, 1.5)) return;
ui->widget->playerList[playerID]->move(-0.2);
ui->widget->updateGL();
break;
case Qt::Key_Right:
ui->widget->playerList[playerID]->rotate(10);
ui->widget->updateGL();
break;
case Qt::Key_Left:
ui->widget->playerList[playerID]->rotate(-10);
ui->widget->updateGL();
break;
case Qt::Key_Q:
ui->widget->playerList[playerID]->rotateCannon(10);
ui->widget->updateGL();
break;
case Qt::Key_E:
ui->widget->playerList[playerID]->rotateCannon(-10);
ui->widget->updateGL();
break;
default:
QMainWindow::keyPressEvent(event);
break;
}

最佳答案

您可以将按下的键添加到按下的键集中,并在释放键时从该集中删除。因此,您可以将按下的键添加到作为类成员的 QSet 中:

QSet<int> pressedKeys;

您可以在事件过滤器中捕获关键事件:

bool MyWidget::eventFilter(QObject * obj, QEvent * event)
{

if(event->type()==QEvent::KeyPress) {

pressedKeys += ((QKeyEvent*)event)->key();

f( pressedKeys.contains(Qt::Key_Up) && pressedKeys.contains(Qt::Key_Left) )
{
// up and left is pressed
}

}
else if(event->type()==QEvent::KeyRelease)
{

pressedKeys -= ((QKeyEvent*)event)->key();
}


return false;
}

不要忘记在构造函数中安装事件过滤器:

this->installEventFilter(this);

关于c++ - 在 Qt C++ 中使用多个键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23816380/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com