QQmlIncubationController Class
QQmlIncubationController インスタンスは QQmlIncubator の進捗を管理します。詳細...
Header: | #include <QQmlIncubationController> |
CMake: | find_package(Qt6 REQUIRED COMPONENTS Qml) target_link_libraries(mytarget PRIVATE Qt6::Qml) |
qmake: | QT += qml |
パブリック関数
QQmlIncubationController() | |
QQmlEngine * | engine() const |
void | incubateFor(int msecs) |
void | incubateWhile(std::atomic<bool> *flag, int msecs = 0) |
int | incubatingObjectCount() const |
保護された関数
virtual void | incubatingObjectCountChanged(int incubatingObjectCount) |
詳細説明
非同期に動作し、アプリケーションにスタッタやフリーズを発生させないためには、QQmlIncubators のオブジェクト生成処理は、アプリケーションのアイドル時間中にのみ実行されなければなりません。QQmlIncubationController により、アプリケーションはこの処理をいつ、どれくらいの頻度で、どれくらいの時間行うかを正確に制御することができます。
QQmlIncubationController 派生インスタンスを作成し、QQmlEngine::setIncubationController() メソッドを呼び出してQQmlEngine に設定します。その後、アプリケーションの要求に応じてQQmlIncubationController::incubateFor() やQQmlIncubationController::incubateWhile() メソッドを呼び出すことで、処理を制御します。
たとえば、これは、16ミリ秒ごとに最大5ミリ秒インキュベートするインキュベーションコントローラの例である。
class PeriodicIncubationController : public QObject, public QQmlIncubationController { public: PeriodicIncubationController() { startTimer(16); } protected: void timerEvent(QTimerEvent *) override { incubateFor(5); } };
この例は機能するが、かなり単純化されている。実世界のインキュベーションコントローラは、アプリケーションを妨害しないようにしながら、消費するアイドル時間を最大化しようとする。上記のような5ミリ秒の固定量を使用すると、あるフレームではアイド ル時間を残し、他のフレームではアプリケーションを妨害する可能性がある。
QQuickWindowまた、QQuickView 、QQuickWidget はすべて、よりインテリジェントなアルゴリズムを用いて、複数のフレームにわたってインキュベーションの間隔をあけるインキュベーション・コントローラーをあらかじめ作成します。自分で書く必要はほとんどない。
メンバー関数ドキュメント
QQmlIncubationController::QQmlIncubationController()
新しい孵化コントローラーを作成する。
QQmlEngine *QQmlIncubationController::engine() const
このインキュベーションコントローラーが設定されているQQmlEngine を返すか、どのエンジンにも設定されていない場合は 0 を返す。
void QQmlIncubationController::incubateFor(int msecs)
msecs 、またはインキュベートするオブジェクトがなくなるまでオブジェクトをインキュベートする。
void QQmlIncubationController::incubateWhile(std::atomic<bool> *flag, int msecs = 0)
flag が指すアトミック bool が true の間、またはインキュベートするオブジェクトがなくなるまで、またはmsecs が 0 でない場合はmsecs まで、オブジェクトをインキュベートする。
一般的にこのメソッドは、インキュベーションを中断させたいときにflag が指すブールをfalseに設定するスレッドまたはUNIXシグナルと組み合わせて使用される。
注: flag は、acquire memory ordering を使って読み込まれる。
int QQmlIncubationController::incubatingObjectCount() const
現在インキュベートしているオブジェクトの数を返す。
[virtual protected]
void QQmlIncubationController::incubatingObjectCountChanged(int incubatingObjectCount)
インキュベート中のオブジェクトの数が変化したときに呼び出される。incubatingObjectCount はインキュベート中のオブジェクトの新しい数である。
デフォルトの実装では何もしません。
本ドキュメントに含まれる文書の著作権は、それぞれの所有者に帰属します。 本書で提供されるドキュメントは、Free Software Foundation が発行したGNU Free Documentation License version 1.3に基づいてライセンスされています。 Qtおよびそれぞれのロゴは、フィンランドおよびその他の国におけるThe Qt Company Ltd.の 商標です。その他すべての商標は、それぞれの所有者に帰属します。