使用Qt时将键盘输入定向到小部件
我正在使用Qt创建一个GUI。基本上,它是一个交互式地图,实时显示机器人在竞技场中移动,并允许用户通过使用鼠标和键盘键与机器人交互(告诉他们去/停)。我用opengl创建了地图,一切都很好,我可以看到机器人在地图上移动,我可以按键盘上的不同键,发送实际的机器人命令 现在,我需要把这个地图变成一个更大的图形用户界面的一部分,这个图形用户界面包含这个地图和其他对象,并不是所有的对象都必须使用opengl。因此,通过使用QtCreator(designer),我在GUI中添加了一些拖放选项卡,并在GUI中添加了一个“dockwidget”。dockwidget保存了我之前创建的交互式地图。但现在,我无法再使用键盘向地图发送命令。我仍然可以在我的地图上点击不同的机器人,我可以看到它们被选中并改变颜色(就像我编码的那样),但按键没有相应的动作(就像编码的那样) 这就是地图本身的样子 这是作为停靠小部件的地图。(在widge内,我可以点击一个机器人,使其变黄) 所以,我的问题是,在使用Qt时,如何将键盘输入定向到窗口中的特定小部件。据我所知,这可能与设置焦点策略有关。因此,我尝试在构造函数中将dockwidget的focuspolicy设置为“StrongFocus”(以便它可以接受键盘输入),但这没有帮助 下面是我将地图设置为dockwidget的代码,我还试图设置焦点使用Qt时将键盘输入定向到小部件,qt,opengl,widget,keyboard-events,Qt,Opengl,Widget,Keyboard Events,我正在使用Qt创建一个GUI。基本上,它是一个交互式地图,实时显示机器人在竞技场中移动,并允许用户通过使用鼠标和键盘键与机器人交互(告诉他们去/停)。我用opengl创建了地图,一切都很好,我可以看到机器人在地图上移动,我可以按键盘上的不同键,发送实际的机器人命令 现在,我需要把这个地图变成一个更大的图形用户界面的一部分,这个图形用户界面包含这个地图和其他对象,并不是所有的对象都必须使用opengl。因此,通过使用QtCreator(designer),我在GUI中添加了一些拖放选项卡,并在GU
#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);
否则它将无法工作