Класс QQmlIncubationController
Экземпляры QQmlIncubationController управляют процессом инкубации QQmlIncubators. Подробнее...
| Заголовок: | #include <QQmlIncubationController> |
| qmake: | QT += qml |
Открытые функции
| QQmlIncubationController() | |
| QQmlEngine * | engine() const |
| void | incubateFor(int msecs) |
| void | incubateWhile(volatile 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 или до тех пор, пока не останется больше объектов для инкубации.
void QQmlIncubationController::incubateWhile(volatile bool *flag, int msecs = 0)
Инкубирует объекты, пока значение bool, на которое указывает flag, равно true, или пока не останется больше объектов для инкубации, или до msecs, если msecs не равно нулю.
Как правило, этот метод используется совместно с потоком или сигналом UNIX, который устанавливает значение bool, на который указывает flag, в false, когда необходимо прервать инкубацию.
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-5.14/qqmlincubationcontroller.html