gpt4 book ai didi

c++ - 使用 QComboBox 后 QGraphicsItem 失去焦点

转载 作者:太空宇宙 更新时间:2023-11-04 12:53:47 26 4
gpt4 key购买 nike

我正在用 Qt 做一个小游戏,并尝试使用 WASD 来移动我的主角(QGraphicsPixmapItem)。 map 很大,所以我使用 QComboBox 来改变场景的比例。

游戏是这样的:

简单的游戏

我是如何塑造主角的:

protagonist = new MyProtagonist();
protagonist->setFlag(QGraphicsItem::ItemIsFocusable);
protagonist->setFocus();
scene->addItem(protagonist);

我是如何构建组合框的:

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

一开始一切都很好。但是,在我点击组合框之后,我的主角就不能再被键盘控制了。我需要点击我的主角让它再次聚焦。

有没有办法让它自动聚焦?

非常感谢。

最佳答案

通过单击 QComboBoxQGraphicsView 会失去焦点。您尝试通过在 QGraphicsPixmapItem 上调用 setFocus(); 将其返回。这种方法并不像您预期​​的那样起作用,因为它将焦点项设置在 View 内部,但 View 本身仍然没有焦点。要在 MainWindow::sceneScaleChanged 而不是 protagonist->setFocus(); 中解决这个问题,请编写 view->setFocus();

关于c++ - 使用 QComboBox 后 QGraphicsItem 失去焦点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47684547/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com