Класс QQuickRenderControl
Класс QQuickRenderControl предоставляет механизм для отрисовки сцены Qt Quick на отложенной цели отрисовки в полном контроле приложения. Подробнее...
| Заголовок: | #include <QQuickRenderControl> |
| qmake: | QT += quick |
| С тех пор: | Qt 5.4 |
| Наследует: | QObject |
Открытые функции
| QQuickRenderControl(QObject *parent = Q_NULLPTR) | |
| ~QQuickRenderControl() | |
| QImage | grab() |
| void | initialize(QOpenGLContext *gl) |
| void | invalidate() |
| void | polishItems() |
| void | prepareThread(QThread *targetThread) |
| void | render() |
| virtual QWindow * | renderWindow(QPoint *offset) |
| bool | sync() |
- 32 открытых функций, унаследованных от QObject
Сигналы
| void | renderRequested() |
| void | sceneChanged() |
- 2 сигнала, унаследованных от QObject
Статические открытые члены
| QWindow * | renderWindowFor(QQuickWindow *win, QPoint *offset = Q_NULLPTR) |
- 11 статических открытых членов, унаследованных от QObject
Дополнительные унаследованные члены
- 1 свойство, унаследованное от QObject
- 1 открытый слот, унаследованный от QObject
- 9 защищенных функций, унаследованных от QObject
Подробное описание
Класс QQuickRenderControl предоставляет механизм для отрисовки сцены Qt Quick на отложенной цели отрисовки в полном контроле приложения.
QQuickWindow и QQuickView и связанные внутренние циклы отрисовки отображают сцену Qt Quick на нативное окно. В некоторых случаях, например, при интеграции с сторонними OpenGL-рендерерами, может быть полезно получить сцену в виде текстуры, которую затем можно использовать произвольным образом внешним рендерером. QQuickRenderControl делает это возможным с помощью аппаратного ускорения, в отличие от альтернативы с ограниченной производительностью использования QQuickWindow::grabWindow().
При использовании QQuickRenderControl, QQuickWindow не нужно отображать или даже создавать вообще. Это означает, что для него не будет основного нативного окна. Вместо этого экземпляр QQuickWindow ассоциируется с элементом управления рендеринга, используя перегрузку конструктора QQuickWindow, и объектом буфера фрейма OpenGL, вызывая QQuickWindow::setRenderTarget().
Управление контекстом и объектом буфера фрейма зависит от приложения. Контекст, который будет использоваться Qt Quick, должен быть создан до вызова initialize(). Создание объекта буфера фрейма может быть отложено, см. ниже. Qt 5.4 добавляет возможность для QOpenGLContext использовать существующие нативные контексты. Вместе с QQuickRenderControl это позволяет создать QOpenGLContext, который совместно использует существующий контекст внешнего рендерера. Затем этот новый QOpenGLContext может использоваться для рендеринга сцены Qt Quick в текстуру, которая также доступна контексту другого движка.
Загрузка и создание компонентов QML происходит с использованием QQmlEngine. После создания корневого объекта его необходимо установить в качестве родительского для contentItem() QQuickWindow.
Приложения обычно должны подключиться к 4 важным сигналам:
- QQuickWindow::sceneGraphInitialized() Издаётся в какой-то момент после вызова QQuickRenderControl::initialize(). При получении этого сигнала приложение должно создать свой объект буфера фрейма и связать его с QQuickWindow.
- QQuickWindow::sceneGraphInvalidated() Когда ресурсы сцены освобождаются, объект буфера фрейма также может быть уничтожен.
- QQuickRenderControl::renderRequested() Указывает, что сцена должна быть отрисована вызовом render(). После переключения контекста приложения должны вызвать render().
- QQuickRenderControl::sceneChanged() Указывает, что сцена изменилась, что означает, что перед рендерингом необходимы также операции полирования и синхронизации.
Для отправки событий, например, событий мыши или клавиатуры, в сцену используйте QCoreApplication::sendEvent() с экземпляром QQuickWindow в качестве получателя.
Примечание: В целом, QQuickRenderControl поддерживается в сочетании со всеми бэкендами Qt Quick. Однако некоторые функции, в частности grab(), могут быть недоступны во всех случаях.
Документация по членам-функциям
QQuickRenderControl::QQuickRenderControl(QObject *parent = Q_NULLPTR)
Создаёт объект QQuickRenderControl с родительским объектом parent.
QQuickRenderControl::~QQuickRenderControl()
Уничтожает экземпляр. Освобождает все ресурсы сцены.
См. также invalidate().
QImage QQuickRenderControl::grab()
Захватывает содержимое сцены и возвращает его как изображение.
Примечание: Требует, чтобы контекст был текущим.
void QQuickRenderControl::initialize(QOpenGLContext *gl)
Инициализирует ресурсы сцены. Контекст gl должен быть текущим контекстом OpenGL или нулевым, если это не актуально, потому что используется бэкенд Qt Quick, отличный от OpenGL.
Примечание: Qt Quick не принимает на себя владение контекстом. Приложение должно уничтожить его после вызова invalidate() или после уничтожения экземпляра QQuickRenderControl.
void QQuickRenderControl::invalidate()
Останавливает рендеринг и освобождает ресурсы. Требует текущего контекста.
Это эквивалентно операциям очистки, которые выполняются с реальным QQuickWindow, когда окно скрывается.
Эта функция вызывается из деструктора. Поэтому обычно нет необходимости вызывать её напрямую. Однако обратите внимание на то, что это требует контекста, переданного в initialize(), чтобы он был текущим во время уничтожения экземпляра QQuickRenderControl.
После вызова invalidate() можно повторно использовать экземпляр QQuickRenderControl, вызвав initialize() снова.
Примечание: Эта функция не учитывает QQuickWindow::persistentSceneGraph() или QQuickWindow::persistentOpenGLContext(). Это означает, что ресурсы, специфичные для контекста, всегда освобождаются.
void QQuickRenderControl::polishItems()
Эта функция должна вызываться как можно позже перед sync(). В сценарии с несколькими потоками отрисовка может происходить параллельно с этой функцией.
void QQuickRenderControl::prepareThread(QThread *targetThread)
Подготавливает отрисовку сцены Qt Quick вне потока GUI.
targetThread указывает поток, в котором будут происходить синхронизация и рендеринг. Нет необходимости вызывать эту функцию в сценарии с одним потоком.
void QQuickRenderControl::render()
Отображает графическое представление сцены с использованием текущего контекста.
[signal] void QQuickRenderControl::renderRequested()
Этот сигнал излучается, когда необходимо отобразить графическое представление сцены. Вызов sync() не обязателен.
Примечание: Избегайте непосредственного вызова отрисовки при излучении этого сигнала. Вместо этого предпочтительнее отложить его, например, используя таймер. Это приведет к лучшей производительности.
[virtual] QWindow *QQuickRenderControl::renderWindow(QPoint *offset)
Переопределяется в подклассах для возвращения реального окна, в которое происходит отрисовка этим элементом управления.
Если offset не равен нулю, он устанавливается в смещение элемента управления внутри окна.
Примечание: Хотя это не обязательно, переопределение этой функции становится необходимым для поддержки нескольких экранов с различными соотношениями пикселей устройства и правильного позиционирования всплывающих окон, открываемых из QML. Поэтому его переопределение в подклассах настоятельно рекомендуется.
[static] QWindow *QQuickRenderControl::renderWindowFor(QQuickWindow *win, QPoint *offset = Q_NULLPTR)
Возвращает реальное окно, в которое отображается win, если таковое имеется.
Если offset не равен нулю, он устанавливается в смещение отрисовки внутри его окна.
[signal] void QQuickRenderControl::sceneChanged()
Этот сигнал излучается, когда графическое представление сцены обновляется, что означает, что необходимо вызвать polishItems() и sync(). Если sync() возвращает true, то необходимо вызвать render().
Примечание: Избегайте непосредственного вызова полирования, синхронизации и отрисовки при излучении этого сигнала. Вместо этого предпочтительнее отложить их, например, используя таймер. Это приведет к лучшей производительности.
bool QQuickRenderControl::sync()
Эта функция используется для синхронизации сцены QML с графическим представлением сцены.
Если используется отдельный поток отрисовки, поток пользовательского интерфейса должен быть заблокирован на время выполнения этого вызова.
Возвращает true, если синхронизация изменила графическое представление сцены.
© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/qt-5.9/qquickrendercontrol.html