QEventLoopとQTイベントループ

 

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

 

おすすめ

転載: www.cnblogs.com/xiangtingshen/p/11078332.html