使用QComboBox后,QGraphicsItem失去焦点

时间:2017-12-06 22:29:16

标签: c++ qt

我在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();
}

一切都很好。然而,在我点击组合框后,我的主角不再受键盘控制了。我需要点击我的主角再次集中注意力。

有没有办法自动设定它?

非常感谢。

1 个答案:

答案 0 :(得分:0)

单击 QComboBox QGraphicsView 将失去焦点。您尝试通过调用 QGraphicsPixmapItem 上的setFocus();将其返回。此方法无法按预期工作,因为它将焦点项设置在视图中,但视图本身仍然没有焦点。要在MainWindow::sceneScaleChanged而不是protagonist->setFocus();view->setFocus();来解决此问题。