QQmlIncubationController 类

QQmlIncubationController 实例驱动 QQmlIncubators 的进程。 更多...

头文件 #include <QQmlIncubationController>
CMakefind_package(Qt6 REQUIRED COMPONENTS Qml)
target_link_libraries(mytarget PRIVATE Qt6::Qml)
qmakeQT += qml

公开函数

QQmlIncubationController()
QQmlEngine *engine() const
voidincubateFor(int msecs)
voidincubateWhile(std::atomic<bool> *flag, int msecs = 0)
intincubatingObjectCount() const

受保护函数

virtual voidincubatingObjectCountChanged(int incubatingObjectCount)

详细描述

为了行为异步且不引起应用的卡顿或冻结,QQmlIncubators 创建对象的进程必须在应用的空闲时间进行。QQmlIncubationController 允许应用精确控制何时、多频繁以及持续时间多长进行此处理。

通过调用 QQmlEnginesetIncubationController() 方法创建一个 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 毫秒量可能会导致某些帧中有空闲时间而没有使用,同时在其他帧中打扰应用。

QQuickWindowQQuickViewQQuickWidget 都预先创建了一个孵化控制器,该控制器使用更智能的算法将孵化分散到多个帧中。您很少需要自己编写。

成员函数文档

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公司的商标。所有其他商标均为其各自所有者的财产。