1.一般的に、我々は、次の例のように、開放するイベントループのexec()によるものです。
1つのQCoreApplicaton ::のexec() 2はQApplication ::のexec() 3 QDialog ::のexec() 4 QThread ::のexec() 5 QDrag ::のexec() 6 QMenu ::のexec()
これらのイベントは、オープンループあり、イベントは、execからプログラム()ジャンプするまで実行する機会の欠如の背後にあるのexec()のコードで作る、EXECで無限ループ内のすべての無限ループ「リサイクル」プログラム()の最初のものです。()幹部から飛び出すときに、イベントループは終了しました。QEventLoop ::)イベントループを終了することができます(終了します。
イベントループはイベントの包含を順次処理し、行われた時間と時間サイクルの終わりではない場合、実際に(;;)forループフリーCPUイベントに類似しているが、イベントキューに実際に似ています。
その本質は、実際にタイムスライスの再キュー割り当てへの道です。
2.イベントループをするとき、サブイベントループ子が親のexecサイクルイベントを実行することができたとき、親イベントループ割り込みイベントがループの外に、状態に実際にある、入れ子にすることができます。もちろん、これは、多くの場合、サブサイクルイベントで親ループ過半数が存在しますので、サブサイクルの実装では、親ループインターフェース応答に似たが、中断されることを実行QMessageBoxを意味するものではありません:: EXEC()、QEventLoop :: Execの()場合、もののEXEC()は、exec()::はQApplicationに)(主に中断が、原因、それは副ループに含まれているので、GUIインタフェースがまだ応答を取得することができるGUIインターフェースの応答に。
サブイベントループがまだ有効であるが、親がループのうちの親がすぐに実行されませんサイクル、から飛び出すが、イベントループジャンプの後に子供を待つことを余儀なくされた場合3.、親は循環外となります
それのいくつかの例は、例えば、あなたが100ミリ秒を待つためにメインスレッドをしたい場合は、睡眠はそれを使用することはできません、それが応答を停止するGUIインターフェイスにつながるが、イベントループでこれを避けるために:
1つのQEventLoopループ。 2 QTimer :: SINGLESHOT(100、&ループ、SLOT(終了()))。 3 loop.exec()。
トリガーがダイアログをポップアップしますが、このようにそれを書き込みます後、例えば、スロット機能は、ウィンドウはつかの間になりますがあります。
1つの空隙**** :: mySLot { 2 QDialog DLG。 3 dlg.show()。 4}
もちろん、どこが成長期の生涯を通じて、この問題を解決するために、静的メンバにDLGを使用することができますが、同じようにこの問題を解決するためにイベントループここで使用されます。
1つの空隙**** :: mySLot { 2 QDialog DLG。 3 dlg.show()。 4 QEventLoopループ。 5(())(終了&DLG、SIGNAL(完成(INT))、&ループ、SLOT)を接続。 6 loop.exec(QEventLoop :: ExcludeUserInputEvents)。 7 }
ターン:https://www.cnblogs.com/-wang-cheng/p/4973021.html