返回主窗口/ C ++后,应用程序正在关闭
app is closing after going back to main window / c++
在我的主窗口中,我使用此代码打开了我的游戏应用程序
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
中定义变量。您需要添加范围。我很惊讶编译器不会为此对你大喊大叫。
第二个问题(导致您的问题(是变量w
是switch
语句中的局部变量。一旦声明结束,生命周期和w
也会结束,它就会被破坏并不复存在。
解决方案(据我所知(似乎很简单:不要创建和打开新的主窗口!当你开始"太空侵略者"游戏时,你永远不会关闭原来的主窗口,它应该仍然在后台运行。
然而,这是一种非常糟糕的"运行"方式,本质上应该是一个单独的程序,或者至少是正常程序流和事件循环的一部分。要么将小游戏提取到它自己的程序中,然后加载并执行,要么不创建单独的应用程序对象,只打开一个普通窗口,让主应用程序事件循环处理它。
使用这个我解决了我的问题
void CSpaceInwaders::onGameOver(){
this->close();
}
相关文章:
- 如何将一个窗口保留在另一个应用程序窗口的前面
- 在C++中获取应用程序窗口的大小
- 如何隐藏最大化和最小化按钮并在qml应用程序窗口中显示关闭按钮?
- 当电子的窗口隐藏时如何激活另一个应用程序窗口
- 如何在QT中获取背景应用程序窗口标题
- 您如何使用Winrt创建经典的Win32应用程序窗口
- 当模式窗口最小化时,最小化所有应用程序窗口(在 Linux 上)
- 更改 C++ 应用程序的应用程序窗口图标
- 仅从 EnumDesktopWindows 识别应用程序窗口
- 隐藏自定义应用程序窗口,但应在任务栏上显示应用程序图标(不是作为托盘图标)
- 如何在应用程序窗口中设置光标位置?(C )
- QT QML - 在 C++ 的现有应用程序窗口中显示一个矩形
- 如何通过QT 5.6设置QML应用程序窗口透明
- 打开不同的图像文件,并使用GDI 库在主应用程序窗口的背景上绘制它们
- 获取应用程序窗口的完整目录
- 在linux中动态地将应用程序窗口排列在一个又一个之上
- 在Gnome或KDE中以编程方式移动桌面上的应用程序窗口
- Qt5.6 RHEL全屏应用程序窗口和子窗口
- Visual Studio 2012应用程序窗口创建/调整大小与VS2008窗口创建不同?为什么?
- QtQuick2 无法将应用程序窗口关闭信号连接到方法(C++新手)