QQmlIncubationController Class
QQmlIncubationController instances drive the progress of QQmlIncubators. More...
| Header: | #include <QQmlIncubationController> |
| CMake: | find_package(Qt6 REQUIRED COMPONENTS Qml)target_link_libraries(mytarget PRIVATE Qt6::Qml) |
| qmake: | QT += qml |
Public Functions
| QQmlIncubationController() | |
| QQmlEngine * | engine() const |
| void | incubateFor(int msecs) |
| int | incubatingObjectCount() const |
Protected Functions
| virtual void | incubatingObjectCountChanged(int incubatingObjectCount) |
Detailed Description
In order to behave asynchronously and not introduce stutters or freezes in an application, the process of creating objects a QQmlIncubators must be driven only during the application's idle time. QQmlIncubationController allows the application to control exactly when, how often and for how long this processing occurs.
A QQmlIncubationController derived instance should be created and set on a QQmlEngine by calling the QQmlEngine::setIncubationController() method. Processing is then controlled by calling the QQmlIncubationController::incubateFor() or QQmlIncubationController::incubateWhile() methods as dictated by the application's requirements.
For example, this is an example of a incubation controller that will incubate for a maximum of 5 milliseconds out of every 16 milliseconds.
class PeriodicIncubationController : public QObject, public QQmlIncubationController { public: PeriodicIncubationController() { startTimer(16); } protected: void timerEvent(QTimerEvent *) override { incubateFor(5); } };
Although the example works, it is heavily simplified. Real world incubation controllers try and maximize the amount of idle time they consume while not disturbing the application. Using a static amount of 5 milliseconds like above may both leave idle time on the table in some frames and disturb the application in others.
QQuickWindow, QQuickView, and QQuickWidget all pre-create an incubation controller that spaces out incubation over multiple frames using a more intelligent algorithm. You rarely have to write your own.
Member Function Documentation
QQmlIncubationController::QQmlIncubationController()
Create a new incubation controller.
QQmlEngine *QQmlIncubationController::engine() const
Return the QQmlEngine this incubation controller is set on, or 0 if it has not been set on any engine.
void QQmlIncubationController::incubateFor(int msecs)
Incubate objects for msecs, or until there are no more objects to incubate.
int QQmlIncubationController::incubatingObjectCount() const
Return the number of objects currently incubating.
[virtual protected] void QQmlIncubationController::incubatingObjectCountChanged(int incubatingObjectCount)
Called when the number of incubating objects changes. incubatingObjectCount is the new number of incubating objects.
The default implementation does nothing.