2017-04-05 4 views
0

次のコードは、MainWindowが再び開くと、すぐ近くになります:QApplicationのapp.exec()の動作を説明する方法。

int main(int argc, char *argv[]) 
{ 
    QApplication app(argc, argv); 
    QDir::setCurrent(QCoreApplication::applicationDirPath()); //just to be complete... 
    if (app.arguments().size() == 1) 
    { 
     MainWindow mainWin; 
     mainWin.show(); 
    } 
    return app.exec(); 
} 

私と同じです、次のバージョンは、予想通りMainWindowを示している:

int main(int argc, char *argv[]) 
{ 
    QApplication app(argc, argv); 
    QDir::setCurrent(QCoreApplication::applicationDirPath()); //just to be complete... 
    if (app.arguments().size() == 1) 
    { 
     MainWindow mainWin; 
     mainWin.show(); 
     return app.exec(); 
    } 
} 

のはなぜですそれ?

答えて

1

最初のケースではブロック内にMainWindowがあります。そのブロックが終了すると、その内部で作成されたすべてがアプリケーションイベントループを開始する前に自動的に破棄されます。後者の場合、ブロックは、アプリケーションのイベントループが停止した後で終了します。

if (app.arguments().size() == 1) 
{ 
    MainWindow mainWin; 
    mainWin.show(); 
} // mainWin is destroyed here 
return app.exec(); 
+0

ああgosh true that !!!どのように私は忘れることができる:D – tobilocker

関連する問題