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 previous example would work, it is not optimal. Real world incubation controllers should try and maximize the amount of idle time they consume - rather than a static amount like 5 milliseconds - while not disturbing the application.
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.