как перезапустить приложение в 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;
}

person maryam    schedule 06.07.2014    source источник


Ответы (3)


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

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

qApp->quit();

Здесь myApp — имя исполняемого файла приложения. В Windows это может быть myApp.exe.

person Nejat    schedule 10.07.2014
comment
Вы можете поместить его в любом месте, где вы хотите перезапустить. Попробуйте это в своем коде и посмотрите, поможет ли это. - person Nejat; 11.07.2014

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

person Thomas Ayoub    schedule 06.07.2014
comment
теперь, что мне делать в моем коде? Я новичок в qt. Если возможно, поместите пример кода. - person maryam; 06.07.2014

Существует запись Qt Wiki, в которой довольно подробно объясняется, что вам нужно сделать.

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

person Sty    schedule 18.09.2018