Я делаю это работает для перезапуска моей игры, но программа имеет ошибку. Я хочу показать 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;
}
Ты можешь использовать QProcess::startDetached
запустить экземпляр вашего приложения в новом процессе и отсоединиться от него. После этого вы должны выйти из приложения:
QProcess process;
process.startDetached("myApp",QStringList());
qApp->quit();
Вот myApp
Имя исполняемого файла приложения. На винде это может быть myApp.exe
,
На этом я хотел бы сделать небольшое представление … скажем, ваше основное приложение называется A
тогда ты должен бежать A
в глобальном B
приложение. когда A
аварий, B
бросает QDialog
, Если использовать нажмите на Retry
затем убить старый экземпляр A
и начать новый.
Eсть Запись в Qt Wiki это объясняет, что вам нужно сделать, достаточно подробно.
Кажется, что вы, по крайней мере, частично получили вдохновение оттуда, но из того, что вы публикуете здесь, вы, похоже, никогда не инициализировали значения для EXIT_CODE_REBOOT и RESTART_CODE в своем примере кода или, по крайней мере, связали их друг с другом (что я ожидаю ты бы хотел сделать как-нибудь)