使用Qt时将键盘输入定向到小部件

使用Qt时将键盘输入定向到小部件,qt,opengl,widget,keyboard-events,Qt,Opengl,Widget,Keyboard Events,我正在使用Qt创建一个GUI。基本上,它是一个交互式地图,实时显示机器人在竞技场中移动,并允许用户通过使用鼠标和键盘键与机器人交互(告诉他们去/停)。我用opengl创建了地图,一切都很好,我可以看到机器人在地图上移动,我可以按键盘上的不同键,发送实际的机器人命令 现在,我需要把这个地图变成一个更大的图形用户界面的一部分,这个图形用户界面包含这个地图和其他对象,并不是所有的对象都必须使用opengl。因此,通过使用QtCreator(designer),我在GUI中添加了一些拖放选项卡,并在GU

我正在使用Qt创建一个GUI。基本上,它是一个交互式地图,实时显示机器人在竞技场中移动,并允许用户通过使用鼠标和键盘键与机器人交互(告诉他们去/停)。我用opengl创建了地图,一切都很好,我可以看到机器人在地图上移动,我可以按键盘上的不同键,发送实际的机器人命令

现在,我需要把这个地图变成一个更大的图形用户界面的一部分,这个图形用户界面包含这个地图和其他对象,并不是所有的对象都必须使用opengl。因此,通过使用QtCreator(designer),我在GUI中添加了一些拖放选项卡,并在GUI中添加了一个“dockwidget”。dockwidget保存了我之前创建的交互式地图。但现在,我无法再使用键盘向地图发送命令。我仍然可以在我的地图上点击不同的机器人,我可以看到它们被选中并改变颜色(就像我编码的那样),但按键没有相应的动作(就像编码的那样)

这就是地图本身的样子

这是作为停靠小部件的地图。(在widge内,我可以点击一个机器人,使其变黄)

所以,我的问题是,在使用Qt时,如何将键盘输入定向到窗口中的特定小部件。据我所知,这可能与设置焦点策略有关。因此,我尝试在构造函数中将dockwidget的focuspolicy设置为“StrongFocus”(以便它可以接受键盘输入),但这没有帮助

下面是我将地图设置为dockwidget的代码,我还试图设置焦点

    #include "ui_arghri.h"

argHRI::argHRI(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::argHRI)
{
    ui->setupUi(this);
    ui->dockMap->activateWindow();
    //ui->dockMap->keyboardGrabber();
    //ui->dockMap->grabKeyboard();
    ui->dockMap->setFocus();
    ui->dockMap->setFocusPolicy(Qt::StrongFocus);
}

argHRI::~argHRI()
{
    delete ui;
}

void argHRI::addMap(Map * map)
{

    qDebug()<<"argHRI::in AddMap test is "<<map->test;

    //ui->dockMap->show();
    ui->dockMap->setWidget(map);


}
#包括“ui_arghri.h”
argHRI::argHRI(QWidget*父项):
QMainWindow(父级),
用户界面(新用户界面::argHRI)
{
用户界面->设置用户界面(此);
ui->dockMap->activateWindow();
//ui->dockMap->keyboardGrabber();
//ui->dockMap->grabKeyboard();
ui->dockMap->setFocus();
ui->dockMap->setFocusPolicy(Qt::StrongFocus);
}
argHRI::~argHRI()
{
删除用户界面;
}
void argHRI::addMap(Map*Map)
{
qDebug()dockMap->setWidget(map);
}

将处理按键事件的事件过滤器添加到类中。这里有一些例子: 只是别忘了添加:

installEventFilter(this);
否则它将无法工作