QQmlIncubationController 类
QQmlIncubationController 实例驱动 QQmlIncubators 的进程。 更多...
头文件 | #include <QQmlIncubationController> |
CMake | find_package(Qt6 REQUIRED COMPONENTS Qml) target_link_libraries(mytarget PRIVATE Qt6::Qml) |
qmake | QT += qml |
公开函数
QQmlIncubationController() | |
QQmlEngine * | engine() const |
void | incubateFor(int msecs) |
void | incubateWhile(std::atomic<bool> *flag, int msecs = 0) |
int | incubatingObjectCount() const |
受保护函数
virtual void | incubatingObjectCountChanged(int incubatingObjectCount) |
详细描述
为了行为异步且不引起应用的卡顿或冻结,QQmlIncubators 创建对象的进程必须在应用的空闲时间进行。QQmlIncubationController 允许应用精确控制何时、多频繁以及持续时间多长进行此处理。
通过调用 QQmlEngine 的 setIncubationController() 方法创建一个 QQmlIncubationController 派生实例,并将其设置在 QQmlEngine 上。然后根据应用的需求调用 QQmlIncubationController::incubateFor() 或 QQmlIncubationController::incubateWhile() 方法来控制处理。
例如,这是一个 incubation controller 的例子,它将在每 16 毫秒内最多孵化 5 毫秒。
class PeriodicIncubationController : public QObject, public QQmlIncubationController { public: PeriodicIncubationController() { startTimer(16); } protected: void timerEvent(QTimerEvent *) override { incubateFor(5); } };
虽然这个例子是有效的,但它被大大简化了。真实世界的孵化控制器试图最大化使用空闲时间,同时不打扰应用。使用如上所示的静态 5 毫秒量可能会导致某些帧中有空闲时间而没有使用,同时在其他帧中打扰应用。
QQuickWindow、QQuickView 和 QQuickWidget 都预先创建了一个孵化控制器,该控制器使用更智能的算法将孵化分散到多个帧中。您很少需要自己编写。
成员函数文档
QQmlIncubationController::QQmlIncubationController()
创建一个新的孵化控制器。
QQmlEngine *QQmlIncubationController::engine() const
返回此孵化控制器设置的QQmlEngine,或者如果没有设置为任何引擎,则为0。
void QQmlIncubationController::incubateFor(int msecs)
孵化对象时间为msecs,或者直到没有更多对象可孵化。
void QQmlIncubationController::incubateWhile(std::atomic<bool> *flag, int msecs = 0)
当flag指向的原子布尔值为真时,或者直到没有更多对象可孵化,或者当msecs不为零时,孵化对象,最多到msecs。
通常此方法与线程或UNIX信号配合使用,当信号想要中断孵化时,将flag指向的布尔值设置为false。
注意:使用acquire内存顺序读取flag。
int QQmlIncubationController::incubatingObjectCount() const
返回当前正在孵化的对象数量。
[虚拟受保护]
void QQmlIncubationController::incubatingObjectCountChanged(int incubatingObjectCount)
当孵化对象数量改变时被调用。 incubatingObjectCount是新孵化对象的数量。
默认实现不执行任何操作。
© 2024 Qt公司有限公司。此处包含的文档贡献是各自所有者的版权。此处提供的文档是根据免费软件基金会发布的GNU自由文档许可协议版本1.3许可的。Qt和相应的标志是芬兰和/或其他国家Qt公司的商标。所有其他商标均为其各自所有者的财产。