【问题标题】:how to restart an application in qt?如何在qt中重新启动应用程序?
【发布时间】:2014-08-27 02:54:53
【问题描述】:

我这样做是为了重新启动我的游戏,但程序有错误。我想在用户丢失时显示一个QDialog。在这个QDilag 我放了两个pushbutton 用于重试和退出。我还有一个@987654324 @代表游戏开始。我的错误在哪里? (我读过类似的问题并按照这些做,但我有问题)

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;
}

【问题讨论】:

    标签: c++ qt restart qdialog


    【解决方案1】:

    您可以使用QProcess::startDetached 在新进程中运行应用程序的实例并从中分离。之后,您应该退出应用程序:

    QProcess process;
    process.startDetached("myApp",QStringList());
    
    qApp->quit();
    

    这里myApp是应用程序的可执行文件名。在 Windows 上,它可以是 myApp.exe

    【讨论】:

    • 你可以把它放在你想重启的任何地方。在您的代码中尝试一下,看看是否有帮助。
    【解决方案2】:

    在这一点上,我会做一个小开始...假设您的主应用程序称为A,那么您应该在全局B 应用程序中运行A。当A 崩溃时,B 抛出QDialog。如果使用单击Retry,则杀死A 的旧实例并启动一个新实例。

    【讨论】:

    • 现在我在我的代码中做什么?我是 qt 的初学者。如果可能的话,放一个示例代码。
    【解决方案3】:

    Qt Wiki entry 非常详细地解释了您需要做什么。

    您似乎至少从那里获得了部分灵感,但从您在此处发布的内容来看,您似乎从未在代码示例中初始化 EXIT_CODE_REBOOT 和 RESTART_CODE 的值,或者至少将它们相互关联(其中我希望你会想以某种方式做)

    【讨论】:

      猜你喜欢
      • 2011-07-05
      • 2014-11-17
      • 1970-01-01
      • 1970-01-01
      • 2017-01-25
      • 1970-01-01
      • 2011-01-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多