QQmlIncubationController Class
Les instances de `QQmlIncubationController` gèrent le déroulement des `QQmlIncubators`. En savoir plus...
| 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 fonctionner de manière asynchrone et d’éviter tout ralentissement ou blocage de l’application, le processus de création d’objets par un QQmlIncubator doit être exécuté uniquement pendant les périodes d’inactivité de l’application. QQmlIncubationController permet à l’application de contrôler précisément 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 associée à un QQmlEngine, en appelant la méthode QQmlEngine::setIncubationController(). Le traitement est ensuite contrôlé en appelant les méthodes QQmlIncubationController::incubateFor() ou QQmlIncubationController::incubateWhile(), selon les besoins de l'application.
Voici, par exemple, un contrôleur d’incubation qui effectuera une incubation 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 cet exemple fonctionne, il est fortement simplifié. Dans la réalité, les contrôleurs d’incubation tentent de maximiser le temps d’inactivité qu’ils consomment sans perturber l’application. Utiliser une durée statique de 5 millisecondes comme ci-dessus peut à la fois laisser du temps d’inactivité inutilisé dans certaines images et perturber l’application dans d’autres.
QQuickWindow, QQuickView et QQuickWidget proposent tous un contrôleur d’incubation pré-créé qui répartit l’incubation sur plusieurs images à l’aide d’un algorithme plus intelligent. Vous n’aurez que rarement besoin d’écrire le vôtre.
Documentation sur les fonctions membres
QQmlIncubationController::QQmlIncubationController()
Créer un nouveau contrôleur d'incubation.
QQmlEngine *QQmlIncubationController::engine() const
Renvoie l'QQmlEngine e sur laquelle ce contrôleur d'incubation est configuré, ou 0 s'il n'a été configuré 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)
Incube les objets tant que la variable booléenne atomique pointée par ` flag ` est vraie, ou jusqu’à ce qu’il n’y ait plus d’objets à incuber, ou jusqu’à ` msecs ` si ` msecs ` n’est pas nul.
En général, cette méthode est utilisée conjointement avec un thread ou un signal UNIX qui définit la valeur booléenne pointée par flag sur false lorsqu’il souhaite interrompre l’incubation.
Remarque : flag est lu selon l’ordre d’acquisition de la mémoire.
int QQmlIncubationController::incubatingObjectCount() const
Renvoie le nombre d'objets actuellement en incubation.
[virtual protected] void QQmlIncubationController::incubatingObjectCountChanged(int incubatingObjectCount)
Appelée lorsque le nombre d'objets en incubation change. ` incubatingObjectCount ` correspond au 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.