我这样做是为了重新启动我的游戏,但程序有错误。我希望在用户丢失时显示QDialog
。在此QDilag
我放了两个pushbutton
进行重试并退出。我也有一个QDialog
开始游戏。我的错误是什么? (我读了类似的问题并按照这些做但我有问题)
extern int const EXIT_CODE_REBOOT;
mydialog_end::mydialog_end(QWidget *parent) :
QDialog(parent
{
retry=new QPushButton(this);
exit=new QPushButton(this);
retry->setText("RETRY");
exit->setText("EXIT");
connect(retry,SIGNAL(clicked()),this,SLOT(on_retry_clicked()));
connect(exit,SIGNAL(clicked()),this,SLOT(on_exit_clicked()));
}
void mydialog_end::on_retry_clicked()
{
qApp->exit(EXIT_CODE_REBOOT);
accept();
}
void mydialog_end::on_exit_clicked()
{
//what do i do for end of game?
reject();
}
//////////////in class myenemy///////
public slots:
void loss();
void Myenemy1::loss()
{
if(this->collidesWithItem(_mario))
{
//do something....
mydialog_end dialog;
dialog.exec();
}
}
//////////////in main////////////
extern int const RESTART_CODE;
int main(int argc, char *argv[])
{
Mydialogstart dlg;//a dialog for beginning game
int state= dlg.exec();
int return_from_event_loop_code=0;
do
{
QApplication a(argc, argv);
MainWindow w;
if( state==QDialog::Accepted)
{
w.show();
qDebug()<<"accepted";
}
else if(state==QDialog::Rejected)
{
qDebug()<<"rejected";
dlg.close();
return 0;
}
return_from_event_loop_code = a.exec();
} while(return_from_event_loop_code==RESTART_CODE);
return return_from_event_loop_code;
}
答案 0 :(得分:3)
您可以使用QProcess::startDetached
在新进程中运行应用程序的实例并从中分离。之后你应该退出申请:
QProcess process;
process.startDetached("myApp",QStringList());
qApp->quit();
此处myApp
是应用程序的可执行文件的名称。在Windows上,它可以是myApp.exe
。
答案 1 :(得分:2)
在这个问题上,我会稍微开始......假设您的主应用程序名为A
,那么您应该在全局A
应用程序中运行B
。当A
崩溃时,B
会引发QDialog
。如果使用点击Retry
,则终止A
的旧实例并开始新的实例。
答案 2 :(得分:1)
有一个Qt Wiki entry,它详细解释了您需要做什么。
似乎您至少从那里那里得到了一些启发,但是从这里发布的内容来看,您似乎从未初始化过代码示例中EXIT_CODE_REBOOT和RESTART_CODE的值,或者至少没有将它们相互链接(我希望你会以某种方式做