как перезапустить приложение в qt?

Я делаю это работает для перезапуска моей игры, но программа имеет ошибку. Я хочу показать 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;
}

5

Решение

Ты можешь использовать QProcess::startDetached запустить экземпляр вашего приложения в новом процессе и отсоединиться от него. После этого вы должны выйти из приложения:

QProcess process;
process.startDetached("myApp",QStringList());

qApp->quit();

Вот myApp Имя исполняемого файла приложения. На винде это может быть myApp.exe,

3

Другие решения

На этом я хотел бы сделать небольшое представление … скажем, ваше основное приложение называется A тогда ты должен бежать A в глобальном B приложение. когда A аварий, B бросает QDialog, Если использовать нажмите на Retry затем убить старый экземпляр A и начать новый.

2

Eсть Запись в Qt Wiki это объясняет, что вам нужно сделать, достаточно подробно.

Кажется, что вы, по крайней мере, частично получили вдохновение оттуда, но из того, что вы публикуете здесь, вы, похоже, никогда не инициализировали значения для EXIT_CODE_REBOOT и RESTART_CODE в своем примере кода или, по крайней мере, связали их друг с другом (что я ожидаю ты бы хотел сделать как-нибудь)

1
По вопросам рекламы [email protected]