Auf dieser Seite

QQmlIncubationController Class

Instanzen von `QQmlIncubationController` steuern den Fortschritt von `QQmlIncubators`. Mehr...

Überschrift: #include <QQmlIncubationController>
CMake: find_package(Qt6 REQUIRED COMPONENTS Qml)
target_link_libraries(mytarget PRIVATE Qt6::Qml)
qmake: QT += qml

Öffentliche Funktionen

QQmlIncubationController()
QQmlEngine *engine() const
void incubateFor(int msecs)
void incubateWhile(std::atomic<bool> *flag, int msecs = 0)
int incubatingObjectCount() const

Geschützte Funktionen

virtual void incubatingObjectCountChanged(int incubatingObjectCount)

Ausführliche Beschreibung

Um asynchron zu arbeiten und keine Ruckler oder Einfrieren in einer Anwendung zu verursachen, darf die Erstellung von Objekten durch einen QQmlIncubator nur während der Leerlaufzeit der Anwendung erfolgen. Mit QQmlIncubationController kann die Anwendung genau steuern, wann, wie oft und wie lange diese Verarbeitung stattfindet.

Eine von QQmlIncubationController abgeleitete Instanz sollte erstellt und über den Aufruf der Methode „ QQmlEngine::setIncubationController()“ auf ein „ QQmlEngine “ gesetzt werden. Die Verarbeitung wird dann je nach den Anforderungen der Anwendung durch den Aufruf der Methoden „ QQmlIncubationController::incubateFor()“ oder „ QQmlIncubationController::incubateWhile()“ gesteuert.

Dies ist beispielsweise ein Inkubations-Controller, der alle 16 Millisekunden maximal 5 Millisekunden lang inkubiert.

class PeriodicIncubationController : public QObject,
                                     public QQmlIncubationController
{
public:
    PeriodicIncubationController() {
        startTimer(16);
    }

protected:
    void timerEvent(QTimerEvent *) override {
        incubateFor(5);
    }
};

Das Beispiel funktioniert zwar, ist jedoch stark vereinfacht. In der Praxis versuchen Inkubationscontroller, die von ihnen beanspruchte Leerlaufzeit zu maximieren, ohne dabei die Anwendung zu stören. Die Verwendung eines statischen Werts von 5 Millisekunden wie oben beschrieben kann dazu führen, dass in einigen Frames Leerlaufzeit ungenutzt bleibt, während die Anwendung in anderen Frames gestört wird.

QQuickWindow„ QQuickView “ und „ QQuickWidget “ stellen jeweils einen vorgefertigten Inkubationscontroller bereit, der die Inkubation mithilfe eines intelligenteren Algorithmus über mehrere Frames verteilt. Sie müssen selten einen eigenen schreiben.

Dokumentation zu Member-Funktionen

QQmlIncubationController::QQmlIncubationController()

Erstellen Sie einen neuen Inkubationsregler.

QQmlEngine *QQmlIncubationController::engine() const

Gibt den „ QQmlEngine “ zurück, auf den dieser Inkubationscontroller eingestellt ist, oder 0, wenn er auf keinen Motor eingestellt wurde.

void QQmlIncubationController::incubateFor(int msecs)

Objekte für „ msecs “ inkubieren oder so lange, bis keine Objekte mehr zur Inkubation übrig sind.

void QQmlIncubationController::incubateWhile(std::atomic<bool> *flag, int msecs = 0)

Objekte werden so lange inkubiert, wie der atomare bool-Wert, auf den flag verweist, wahr ist, oder bis keine Objekte mehr zur Inkubation vorhanden sind, oder bis zu msecs, sofern msecs ungleich Null ist.

Im Allgemeinen wird diese Methode in Verbindung mit einem Thread oder einem UNIX-Signal verwendet, das den von ` flag ` verwiesenen bool-Wert auf `false` setzt, wenn die Inkubation unterbrochen werden soll.

Hinweis: flag wird unter Verwendung der „Acquire“-Speicherreihenfolge gelesen.

int QQmlIncubationController::incubatingObjectCount() const

Gibt die Anzahl der Objekte zurück, die sich derzeit in der Inkubationsphase befinden.

[virtual protected] void QQmlIncubationController::incubatingObjectCountChanged(int incubatingObjectCount)

Wird aufgerufen, wenn sich die Anzahl der inkubierenden Objekte ändert. „ incubatingObjectCount “ ist die neue Anzahl der inkubierenden Objekte.

Die Standardimplementierung führt keine Aktion aus.

© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.