QQmlIncubationController Class

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

Kopfzeile: #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)

Detaillierte Beschreibung

Um sich asynchron zu verhalten und keine Stottern oder Einfrieren in einer Anwendung zu verursachen, muss der Prozess der Objekterzeugung eines QQmlIncubators nur während der Leerlaufzeit der Anwendung ausgeführt werden. Mit QQmlIncubationController kann die Anwendung genau steuern, wann, wie oft und wie lange diese Verarbeitung stattfindet.

Eine von QQmlIncubationController abgeleitete Instanz sollte auf einer QQmlEngine durch Aufruf der Methode QQmlEngine::setIncubationController() erstellt und eingestellt werden. Die Verarbeitung wird dann durch den Aufruf der Methoden QQmlIncubationController::incubateFor() oder QQmlIncubationController::incubateWhile() gesteuert, wie es die Anforderungen der Anwendung vorgeben.

Dies ist ein Beispiel für einen Inkubationscontroller, der maximal 5 Millisekunden von 16 Millisekunden inkubieren wird.

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

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

Obwohl das Beispiel funktioniert, ist es stark vereinfacht. In der Praxis versuchen Inkubationscontroller, die Leerlaufzeit zu maximieren, ohne die Anwendung zu stören. Die Verwendung eines statischen Wertes von 5 Millisekunden wie oben kann dazu führen, dass in einigen Frames Leerlaufzeit auf dem Tisch liegt und in anderen Frames die Anwendung gestört wird.

QQuickWindowDie Programme QQuickView und QQuickWidget erstellen alle vorab einen Inkubationscontroller, der die Inkubation mit einem intelligenteren Algorithmus über mehrere Frames verteilt. In den seltensten Fällen müssen Sie einen eigenen Controller schreiben.

Dokumentation der Mitgliedsfunktionen

QQmlIncubationController::QQmlIncubationController()

Erstellen Sie einen neuen Inkubationsregler.

QQmlEngine *QQmlIncubationController::engine() const

Gibt die QQmlEngine zurück, auf der dieser Inkubationsregler eingestellt ist, oder 0, wenn er auf keinem Motor eingestellt wurde.

void QQmlIncubationController::incubateFor(int msecs)

Inkubieren Sie die Objekte für msecs, oder bis es keine weiteren Objekte mehr zu inkubieren gibt.

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

Inkubiert Objekte, solange der atomare bool, auf den flag zeigt, wahr ist, oder bis es keine weiteren Objekte zum Inkubieren gibt, oder bis msecs, wenn msecs nicht Null ist.

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

Hinweis: flag wird unter Verwendung der Speicheranordnung acquire gelesen.

int QQmlIncubationController::incubatingObjectCount() const

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

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

Wird aufgerufen, wenn sich die Anzahl der Inkubationsobjekte ändert. incubatingObjectCount ist die neue Anzahl der Inkubationsobjekte.

Die Standardimplementierung tut nichts.

© 2025 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.