2014-07-06 20 views
4

我這樣做可以重新啓動我的遊戲,但程序有錯誤。我想在用戶損失時顯示一個QDialog。在這QDilag我把兩個pushbutton重試和exit.also我有一個QDialog開始遊戲。我的錯誤? (我看過類似的問題,並就這些根據,但尚未我有問題)如何重新啓動qt中的應用程序?

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

回答

3

您可以使用QProcess::startDetached在新進程中運行您的應用程序實例並從中脫離。在此之後,你應該退出應用程序:

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

qApp->quit(); 

這裏myApp是應用程序的可執行文件的名稱。在Windows上,它可以是myApp.exe

+0

我在哪裏寫這個?以前的方法是否正確? – sarina

+0

你可以把它放在你想重新啓動的任何地方。試試你的代碼,看看它是否有幫助。 – Nejat

+0

我使用'QDialog'和我的主要問題是這個問題。我有運行時錯誤。如果可能給我你的郵件地址來描述問題波斯當然,如果你想.thank – sarina

2

就這一個,我會做一點點開始......假設你的主應用程序被稱爲A,那麼你應該在運行A全球B應用程序。當A崩潰時,B拋出QDialog。如果使用點擊Retry然後殺死舊的實例A並開始一個新的實例。

+0

現在我在我的代碼中做了什麼?我是qt初學者,如果可能的話放一個示例代碼。 – sarina