Spec-Zone.ru › Qt 6.1

Класс QQmlIncubationController

Экземпляры QQmlIncubationController управляют ходом обработки QQmlIncubators. Подробнее...

Заголовок: #include <QQmlIncubationController>
CMake: find_package(Qt6 COMPONENTS Qml REQUIRED) 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 позволяет приложению управлять точным временем, частотой и продолжительностью этой обработки.

Экземпляр класса, производного от QQmlIncubationController, должен быть создан и установлен на QQmlEngine с помощью метода QQmlEngine::setIncubationController(). Обработка контролируется вызовом методов QQmlIncubationController::incubateFor() или QQmlIncubationController::incubateWhile() в соответствии с требованиями приложения.

Например, это пример контроллера обработки, который будет обрабатывать объекты максимум 5 миллисекунд из каждых 16 миллисекунд.

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

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

Хотя предыдущий пример будет работать, он не является оптимальным. Контроллеры обработки в реальных приложениях должны стараться максимизировать использование времени простоя — а не использовать статическую величину, как 5 миллисекунд — не нарушая работу приложения.

Документация по функциям-членам

QQmlIncubationController::QQmlIncubationController()

Создать новый контроллер обработки.

QQmlEngine *QQmlIncubationController::engine() const

Возвращает QQmlEngine, на котором установлен этот контроллер обработки, или 0, если он не установлен ни на один движок.

void QQmlIncubationController::incubateFor(int msecs)

Обрабатывать объекты в течение msecs или до тех пор, пока не закончатся объекты для обработки.

[since 5.15] void QQmlIncubationController::incubateWhile(std::atomic<bool> *flag, int msecs = 0)

Обрабатывать объекты, пока атомарная булева переменная, на которую указывает flag, имеет значение true, или пока не закончатся объекты для обработки, или в течение msecs, если msecs не равно нулю.

Как правило, этот метод используется совместно с потоком или сигналом UNIX, который устанавливает булеву переменную, на которую указывает flag, в false, когда требуется прервать обработку.

Примечание: flag считывается с использованием порядка приобретения памяти.

Функция была добавлена в Qt 5.15.

int QQmlIncubationController::incubatingObjectCount() const

Возвращает количество объектов, которые в данный момент обрабатываются.

[virtual protected] void QQmlIncubationController::incubatingObjectCountChanged(int incubatingObjectCount)

Вызывается при изменении количества обрабатываемых объектов. incubatingObjectCount — новое количество обрабатываемых объектов.

По умолчанию реализация ничего не делает.

© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/qt-6.1/qqmlincubationcontroller.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API