gpt4 book ai didi

c++ - 返回主窗口/C++后,应用程序正在关闭

转载 作者:行者123 更新时间:2023-12-02 09:50:45 25 4
gpt4 key购买 nike

在我的主窗口中,我使用以下代码打开了我的游戏应用程序

void MainWindow::on_playButton_clicked(){   
CSpaceInwaders* pGame = new CSpaceInwaders(qApp->screens()[0]->size());
pGame->showFullScreen();
pGame->Run();
}

然后是我称之为的运行函数
void CSpaceInwaders::Run(){
scene()->clear();
setCursor(Qt::BlankCursor);

m_pCannon =new CCannon(EColor::Red);
m_pCannon->setPos(m_onScreenSize.width()/2,m_onScreenSize.height()-gCannonSize.height());
m_pCannon->setFlag(QGraphicsItem::ItemIsFocusable);
m_pCannon->setFocus();
scene()->addItem(m_pCannon);

connect(m_pCannon, &CCannon::sigIncreaseScore,this,&CSpaceInwaders::onIncreaseScore);
connect(m_pCannon, &CCannon::sigDecreseScore,this,&CSpaceInwaders::onDecreseScore);

m_pPoints = new CPoints();
scene()->addItem(m_pPoints);

QTimer* pTimer = new QTimer(this);
connect(pTimer, &QTimer::timeout,this,&CSpaceInwaders::onCreateEnemy);
pTimer->start(2000);}

比赛结束后 ,我想回到主窗口。所以我用了这个函数
void CSpaceInwaders::onGameOver(){
scene()->clear();
QMessageBox msgBox;
msgBox.setText("Game.");
msgBox.setInformativeText("You got hit ! Game Over");
msgBox.setStandardButtons(QMessageBox::Ok);
int ret = msgBox.exec();
switch (ret) {
case QMessageBox::Ok:
close();
MainWindow w;
w.show();
}}

这将我带回到主窗口,但几秒钟后关闭。

我想知道如何解决这个问题

注意:使用QT创建

最佳答案

问题出在以下情况的代码中:

case QMessageBox::Ok:
close();
MainWindow w;
w.show();

问题有两个方面:首先,您实际上无法像这样在 case中定义变量。您需要添加一个范围。我很惊讶编译器没有为此大吼大叫。

第二个问题(这是导致您遇到问题的原因)是,变量 wswitch语句内的 本地变量。语句结束后,生存期和 w也会被破坏,并且不再存在。

解决方案(据我所知)似乎很简单:不要创建和打开新的主窗口!当您启动“太空侵略者”游戏时,您永远不会关闭原始主窗口,它仍应在后台运行。

但是,这是“运行”本质上应该是单独程序或者至少在正常程序流和事件循环中至少一部分的“糟糕”方式。可以将小型游戏解压缩到自己的程序中,然后加载并执行该程序,或者不创建单独的应用程序对象,而只是打开一个普通窗口并让主应用程序事件循环处理它。

关于c++ - 返回主窗口/C++后,应用程序正在关闭,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59641241/

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