首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Qt C++中使用多个键

在Qt C++中使用多个键
EN

Stack Overflow用户
提问于 2014-05-22 20:22:31
回答 2查看 2.8K关注 0票数 4

我正在构建“坦克”游戏,我使用关键事件在地图上运行我的坦克。事实上,我当时只能用一个键,但我需要有能力去做。同时往上走和左走。

下面是我针对单个关键事件的代码:

代码语言:javascript
复制
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;
} 
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-05-23 05:18:49

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

代码语言:javascript
复制
QSet<int> pressedKeys;

可以在事件筛选器中捕获关键事件:

代码语言:javascript
复制
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;
}

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

代码语言:javascript
复制
this->installEventFilter(this);
票数 6
EN

Stack Overflow用户

发布于 2014-05-22 20:35:03

也许你可以考虑看看面具?假设您有方向,定义一个有四个位的掩码:

0 0 0 0

U D L R

每次你只需要检查按下了什么键。AND的口罩:

1000 - Up

0111 -下降

0010 -左

0001 -右

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23816380

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档