我正在使用 Qt 创建一个 GUI。基本上它是一个交互式地图,显示机器人在竞技场中实时移动,并允许用户通过使用鼠标和键盘键与机器人交互(告诉他们去/停止)。我使用 opengl 创建地图本身,一切正常,我可以看到机器人在地图上移动,我可以按键盘上的不同键并发送实际的机器人命令。
现在,我需要把这张地图变成一个更大的 GUI 的一部分,这个 GUI 也将这张地图与其他对象一起保存,并不是所有的对象都必须使用 opengl。因此,通过使用 Qt 创建器(设计器),我在我的 GUI 中有一些拖放选项卡,并且我还在我的 GUI 中添加了一个“dockwidget”。dockwidget 包含我之前创建的交互式地图。但是,现在我无法再使用键盘向我的地图发送命令。我仍然可以在我的地图上点击不同的机器人,我可以看到它们被选中并改变颜色(正如我编码它所做的那样),但按键没有相应的动作(因为它已经被编码)。
这就是地图本身的样子。http://dl.dropbox.com/u/46437808/collision3.png
这是作为停靠小部件的地图。(在小部件里面,我可以点击一个机器人,让它变成黄色)https://www.dropbox.com/s/lpo43rl6z4268im/argHRI.png
所以,我的问题是我们如何在使用 Qt 时将键盘输入定向到窗口中的特定小部件。根据我的阅读,这可能与设置焦点政策有关。因此,我尝试在构造函数中将我的dockwidget 的focuspolicy 设置为“StrongFocus”(以便它可以接受键盘输入),但这并没有帮助。
这是我将地图设置为码头小部件的代码,并且我也在尝试设置焦点。
#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);
}