Sur cette page

QQmlIncubationController Class

Les instances de QQmlIncubationController pilotent la progression des QQmlIncubators. Plus d'informations...

En-tête : #include <QQmlIncubationController>
CMake : find_package(Qt6 REQUIRED COMPONENTS Qml)
target_link_libraries(mytarget PRIVATE Qt6::Qml)
qmake : QT += qml

Fonctions publiques

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

Fonctions protégées

virtual void incubatingObjectCountChanged(int incubatingObjectCount)

Description détaillée

Afin de se comporter de manière asynchrone et de ne pas introduire de bégaiements ou de gels dans une application, le processus de création d'objets dans les QQmlIncubators doit être exécuté uniquement pendant les périodes d'inactivité de l'application. QQmlIncubationController permet à l'application de contrôler exactement quand, à quelle fréquence et pendant combien de temps ce traitement a lieu.

Une instance dérivée de QQmlIncubationController doit être créée et placée sur un site QQmlEngine en appelant la méthode QQmlEngine::setIncubationController(). Le traitement est ensuite contrôlé en appelant les méthodes QQmlIncubationController::incubateFor() ou QQmlIncubationController::incubateWhile() en fonction des besoins de l'application.

Voici un exemple de contrôleur d'incubation qui incube pendant un maximum de 5 millisecondes toutes les 16 millisecondes.

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

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

Bien que l'exemple fonctionne, il est fortement simplifié. Les contrôleurs d'incubation du monde réel essaient de maximiser le temps d'inactivité qu'ils consomment sans perturber l'application. L'utilisation d'une quantité statique de 5 millisecondes comme ci-dessus peut à la fois laisser du temps d'inactivité sur la table dans certains cadres et perturber l'application dans d'autres.

QQuickWindowLes commandes de type "incubation", QQuickView et QQuickWidget précréent toutes un contrôleur d'incubation qui répartit l'incubation sur plusieurs trames à l'aide d'un algorithme plus intelligent. Il est rare que vous ayez à écrire le vôtre.

Documentation des fonctions membres

QQmlIncubationController::QQmlIncubationController()

Créer un nouveau contrôleur d'incubation.

QQmlEngine *QQmlIncubationController::engine() const

Retourne le QQmlEngine sur lequel ce contrôleur d'incubation est réglé, ou 0 s'il n'a été réglé sur aucun moteur.

void QQmlIncubationController::incubateFor(int msecs)

Incuber les objets pendant msecs, ou jusqu'à ce qu'il n'y ait plus d'objets à incuber.

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

Incuber des objets tant que le bool atomique pointé par flag est vrai, ou jusqu'à ce qu'il n'y ait plus d'objets à incuber, ou jusqu'à msecs si msecs n'est pas zéro.

En général, cette méthode est utilisée en conjonction avec un thread ou un signal UNIX qui met le bool pointé par flag à false lorsqu'il veut que l'incubation soit interrompue.

Note : flag est lu en utilisant l'ordre d'acquisition de la mémoire.

int QQmlIncubationController::incubatingObjectCount() const

Renvoie le nombre d'objets en cours d'incubation.

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

Appelé lorsque le nombre d'objets en incubation change. incubatingObjectCount est le nouveau nombre d'objets en incubation.

L'implémentation par défaut ne fait rien.

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