1

Qt book には、次のような例があります。

int main(int argc, char *argv[])  
{    
    QApplication app(argc,argv);  
    QDialog dialog;  
    dialog.show();  
    return app.exec();    
}

それはうまく機能しますが、以下に少し変更を加えた後:

int main(int argc, char *argv[])  
{    
    QApplication app(argc,argv);  
    QDialog dialog;  
    dialog.exec();  
    return app.exec();    
}

ダイアログの右上隅にある閉じるボタンを押すと、ダイアログ ウィンドウは消えましたが、プログラムはまだ実行されています。

dialog.exec() と app.exec() の違いは何ですか? 単純に dialog.exec() を使用してから 0 を返すことはできますか、またはどのような問題が発生しますか?

4

1 に答える 1

4

execQDialog、QMenu、QCoreApplicationのメソッドは、イベント ループを実行します。イベント ループは無限です。

したがって、QApplication イベント ループを最初に開始する必要があります。ほとんどの場合、QDialog::exec() の代わりに QDialog::show() または QDialog::open() を使用する必要があります。

つまり、次のコードがあります。

while (1) // QDialog::exec
{
    // Close event  
}

while (1) // QApplication::exec
{
    // There are no events
}
于 2012-08-22T08:00:12.527 に答える