我在Qt做了一个小游戏并尝试使用WASD来移动我的主角(QGraphicsPixmapItem)。地图非常大,所以我使用QComboBox来改变场景的比例。
游戏看起来像这样:
简单游戏
我是如何建立主角的:
protagonist = new MyProtagonist();
protagonist->setFlag(QGraphicsItem::ItemIsFocusable);
protagonist->setFocus();
scene->addItem(protagonist);
我是如何构建combox的:
sceneScaleCombo = new QComboBox;
QStringList scales;
scales << tr("1%")<<tr("10%") << tr("20%") <<tr("50%") << tr("100%") <<tr("200%");
sceneScaleCombo->addItems(scales);
sceneScaleCombo->setCurrentIndex(4);
connect(sceneScaleCombo,SIGNAL(currentIndexChanged(QString)),this,SLOT(sceneScaleChanged(QString)));
void MainWindow::sceneScaleChanged(const QString &scale)
{
double newScale = scale.left(scale.indexOf(tr("%"))).toDouble() / 100;
QMatrix oldMatrix = view->matrix();
view->resetMatrix();
view->translate(oldMatrix.dx(),oldMatrix.dy());
view->scale(newScale,newScale);
protagonist->setFocus();
}
一切都很好。然而,在我点击组合框后,我的主角不再受键盘控制了。我需要点击我的主角再次集中注意力。
有没有办法自动设定它?
非常感谢。
答案 0 :(得分:0)
单击 QComboBox , QGraphicsView 将失去焦点。您尝试通过调用 QGraphicsPixmapItem 上的setFocus();
将其返回。此方法无法按预期工作,因为它将焦点项设置在视图中,但视图本身仍然没有焦点。要在MainWindow::sceneScaleChanged
而不是protagonist->setFocus();
写view->setFocus();
来解决此问题。