Spec-Zone.ru › Qt 5.6

Класс QQuickRenderControl

Класс QQuickRenderControl предоставляет механизм для отрисовки графического сцены Qt Quick на целевом offscreen-рендеринге полностью под управлением приложения.

Подробнее...

Заголовок: #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()
  • 31 открытых функций, унаследованных от 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 на целевом offscreen-рендеринге полностью под управлением приложения.

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::QQuickRenderControl(QObject *parent = Q_NULLPTR)

Конструирует объект QQuickRenderControl с родительским объектом parent.

QQuickRenderControl::~QQuickRenderControl()

Уничтожает экземпляр. Освобождает все ресурсы сцены.

См. также invalidate().

QImage QQuickRenderControl::grab()

Захватывает содержимое сцены и возвращает его как изображение.

Примечание: Требуется текущий контекст.

void QQuickRenderControl::initialize(QOpenGLContext *gl)

Инициализирует ресурсы графической сцены. Контекст gl должен быть текущим контекстом.

Примечание: 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 не равен null, он устанавливается в смещение элемента управления внутри окна.

Примечание: Хотя это необязательно, переопределение этой функции становится необходимым для поддержки нескольких экранов с различными коэффициентами пикселей устройства и правильного позиционирования всплывающих окон, открытых из QML. Поэтому его рекомендуется реализовывать в подклассах.

[static] QWindow *QQuickRenderControl::renderWindowFor(QQuickWindow *win, QPoint *offset = Q_NULLPTR)

Возвращает реальное окно, в которое отрисовывается win, если таковое имеется.

Если offset не равен null, он устанавливается в смещение отрисовки внутри его окна.

[signal] void QQuickRenderControl::sceneChanged()

Этот сигнал испускается при обновлении графа сцены, что означает, что необходимо вызвать polishItems() и sync(). Если sync() возвращает true, то необходимо вызвать render().

Примечание: Избегайте прямого запуска полирования, синхронизации и отрисовки при испускании этого сигнала. Вместо этого предпочтительнее отложить их, например, с помощью таймера. Это приведет к лучшей производительности.

bool QQuickRenderControl::sync()

Эта функция используется для синхронизации QML сцены с графиком отрисовки.

Если используется отдельный поток отрисовки, поток GUI должен быть заблокирован на время этого вызова.

Возвращает true, если синхронизация изменила граф сцены.

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

Spec-Zone.ru

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