PySide6.QtQml.QQmlIncubationController

class QQmlIncubationController

QQmlIncubationController 实例驱动 QQmlIncubators 的进度。更多

概要

方法

虚拟方法

注意

本文档可能包含从C++自动翻译到Python的代码片段。我们始终欢迎对代码片段翻译的贡献。如果您发现翻译问题,您也可以通过在我们的https:/bugreports.qt.io/projects/PYSIDE上创建工单来告知我们。

详细描述

为了表现异步行为并且不在应用程序中引入卡顿或冻结,创建对象的过程QQmlIncubators必须仅在应用程序的空闲时间内驱动。QQmlIncubationController允许应用程序精确控制何时、多久以及持续多长时间进行此处理。

应该创建一个QQmlIncubationController派生实例,并通过调用setIncubationController()方法将其设置在QQmlEngine上。然后根据应用程序的需求,通过调用incubateFor()incubateWhile()方法来控制处理过程。

例如,这是一个孵化控制器的示例,它将在每16毫秒中最多孵化5毫秒。

class PeriodicIncubationController : public QObject,
                                     public QQmlIncubationController
{
public:
    PeriodicIncubationController() {
        startTimer(16);
    }

protected:
    void timerEvent(QTimerEvent *) override {
        incubateFor(5);
    }
};

尽管这个示例有效,但它被大大简化了。现实世界中的孵化控制器试图在不干扰应用程序的情况下最大化它们消耗的空闲时间。像上面那样使用静态的5毫秒时间,在某些帧中可能会留下空闲时间,而在其他帧中可能会干扰应用程序。

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

__init__()

创建一个新的孵化控制器。

engine()
Return type:

QQmlEngine

返回此孵化控制器设置的QQmlEngine,如果尚未在任何引擎上设置,则返回0。

incubateFor(msecs)
Parameters:

msecs – int

孵化对象持续 msecs 毫秒,或者直到没有更多对象需要孵化。

incubateWhile(flag[, msecs=0])
Parameters:
  • flagatomic

  • msecs – 整数

flag指向的原子布尔值为真时,或者在不再有对象需要孵化时,或者如果msecs不为零时,最多孵化msecs毫秒。

通常,此方法与线程或UNIX信号一起使用,当它希望中断孵化时,将flag指向的布尔值设置为false。

注意

flag 使用获取内存顺序读取。

incubatingObjectCount()
Return type:

整数

返回当前正在孵化的对象数量。

incubatingObjectCountChanged(incubatingObjectCount)
Parameters:

incubatingObjectCount – int

当孵化对象的数量发生变化时调用。incubatingObjectCount 是孵化对象的新数量。

默认实现不执行任何操作。