Spec-Zone.ru › Qt 6.1

Класс QQuickWindow

Класс QQuickWindow предоставляет окно для отображения графической сцены QML. Подробнее...

Заголовок: #include <QQuickWindow>
CMake: find_package(Qt6 COMPONENTS Quick REQUIRED) target_link_libraries(mytarget PRIVATE Qt6::Quick)
qmake: QT += quick
С тех пор: Qt 5.0
Инициализируется: Окно
Наследуется от: QWindow
Наследует:

QQuickView

  • Список всех членов, включая унаследованные члены
  • Устаревшие члены

Типы публичного доступа

Структура GraphicsStateInfo
Перечисление CreateTextureOption { TextureHasAlphaChannel, TextureHasMipmaps, TextureOwnsGLTexture, TextureCanUseAtlas, TextureIsOpaque }
Флаги CreateTextureOptions
Перечисление RenderStage { BeforeSynchronizingStage, AfterSynchronizingStage, BeforeRenderingStage, AfterRenderingStage, AfterSwapStage, NoStage }
Перечисление SceneGraphError { ContextNotAvailable }
Перечисление TextRenderType { QtTextRendering, NativeTextRendering }

Свойства

  • activeFocusItem : QQuickItem* const
  • цвет : QColor
  • contentItem : QQuickItem* const
  • временныйРодитель : QWindow* const

Открытые функции

QQuickWindow(QWindow *parent = nullptr)
виртуальный ~QQuickWindow() override
QQuickItem * activeFocusItem() const
void beginExternalCommands()
QColor color() const
QQuickItem * contentItem() const
QSGImageNode * createImageNode() const
QSGNinePatchNode * createNinePatchNode() const
QSGRectangleNode * createRectangleNode() const
QSGTexture * createTextureFromImage(const QImage &image, QQuickWindow::CreateTextureOptions options) const
QSGTexture * createTextureFromImage(const QImage &image) const
qreal effectiveDevicePixelRatio() const
void endExternalCommands()
QImage grabWindow()
QQuickGraphicsConfiguration graphicsConfiguration() const
QQuickGraphicsDevice graphicsDevice() const
const QQuickWindow::GraphicsStateInfo & graphicsStateInfo()
QQmlIncubationController * incubationController() const
bool isPersistentGraphics() const
bool isPersistentSceneGraph() const
bool isSceneGraphInitialized() const
QQuickRenderTarget renderTarget() const
QSGRendererInterface * rendererInterface() const
void scheduleRenderJob(QRunnable *job, QQuickWindow::RenderStage stage)
void setColor(const QColor &color)
void setGraphicsConfiguration(const QQuickGraphicsConfiguration &config)
void setGraphicsDevice(const QQuickGraphicsDevice &device)
void setPersistentGraphics(bool persistent)
void setPersistentSceneGraph(bool persistent)
void setRenderTarget(const QQuickRenderTarget &target)

Переопределённые открытые функции

виртуальный QAccessibleInterface * accessibleRoot() const override

Открытые слоты

void releaseResources()
void update()

Сигналы

void activeFocusItemChanged()
void afterAnimating()
void afterFrameEnd()
void afterRenderPassRecording()
void afterRendering()
void afterSynchronizing()
void beforeFrameBegin()
void beforeRenderPassRecording()
void beforeRendering()
void beforeSynchronizing()
void closing(QQuickCloseEvent *close)
void colorChanged(const QColor &)
void frameSwapped()
void sceneGraphAboutToStop()
void sceneGraphError(QQuickWindow::SceneGraphError error, const QString &message)
void sceneGraphInitialized()
void sceneGraphInvalidated()

Статические публичные члены

QSGRendererInterface::GraphicsApi graphicsApi()
bool hasDefaultAlphaBuffer()
QString sceneGraphBackend()
void setDefaultAlphaBuffer(bool useAlpha)
void setGraphicsApi(QSGRendererInterface::GraphicsApi api)
void setSceneGraphBackend(const QString &backend)
void setTextRenderType(QQuickWindow::TextRenderType renderType)
QQuickWindow::TextRenderType textRenderType()

Реализованные защищенные функции

virtual void closeEvent(QCloseEvent *e) override
virtual bool event(QEvent *e) override
virtual void exposeEvent(QExposeEvent *) override
virtual void focusInEvent(QFocusEvent *ev) override
virtual void focusOutEvent(QFocusEvent *ev) override
virtual void hideEvent(QHideEvent *) override
virtual void keyPressEvent(QKeyEvent *e) override
virtual void keyReleaseEvent(QKeyEvent *e) override
virtual void mouseDoubleClickEvent(QMouseEvent *event) override
virtual void mouseMoveEvent(QMouseEvent *event) override
virtual void mousePressEvent(QMouseEvent *event) override
virtual void mouseReleaseEvent(QMouseEvent *event) override
virtual void resizeEvent(QResizeEvent *ev) override
virtual void showEvent(QShowEvent *) override
virtual void tabletEvent(QTabletEvent *event) override
virtual void wheelEvent(QWheelEvent *event) override

Подробное описание

QQuickWindow предоставляет управление графической сценой, необходимой для взаимодействия с и отображения сцены QQuickItems.

QQuickWindow всегда имеет один невидимый корневой элемент. Чтобы добавить элементы в это окно, переместите элементы в родительский корневой элемент или в существующий элемент сцены.

Для удобного отображения сцены из файла QML, см. QQuickView.

Отображение

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

Сигнал sceneGraphInitialized() излучается в потоке отображения перед первым отображением сцены QML на экране. Если графическая сцена отображения была освобождена, сигнал будет снова излучен перед отображением следующего кадра. Видимое, отображаемое на экране QQuickWindow управляется внутренне render loop, из которых в графической сцене предоставляется несколько реализаций. Более подробную информацию об обработке отображения графической сцены см. в Qt Quick Scene Graph.

По умолчанию QQuickWindow использует ускоренный 3D графический API, такой как OpenGL или Vulkan. Подробный обзор графических бэкэндов сцены и поддерживаемых графических API см. в Scene Graph Adaptations.

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

Предупреждение: Поскольку многие сигналы, связанные с отображением, излучаются из потока отображения, соединения должны выполняться с использованием Qt::DirectConnection.

Интеграция с ускоренными 3D графическими API

Возможна прямая интеграция вызовов OpenGL, Vulkan, Metal или Direct3D 11 в QQuickWindow, если QQuickWindow и подлежащая графическая сцена отображаются с использованием одного и того же API. Для доступа к объектам нативного графического интерфейса, таким как идентификаторы устройства или контекста, используйте QSGRendererInterface. Экземпляр QSGRendererInterface можно запросить из QQuickWindow, вызвав rendererInterface(). Средства для этой интеграции — сигналы beforeRendering(), beforeRenderPassRecording(), afterRenderPassRecording() и связанные с ними. Они позволяют отображать подложки или наложения. В качестве альтернативы, QNativeInterface::QSGOpenGLTexture, QNativeInterface::QSGVulkanTexture и другие аналогичные классы позволяют обернуть существующий объект нативной текстуры или изображения в QSGTexture, который затем можно использовать с графической сценой.

Отображение без ускорения

Доступен также ограниченный, чисто программный путь отрисовки. С помощью software бэкенда ряд функций Qt Quick недоступны, элементы QML, зависящие от них, вообще не будут отрисовываться. В то же время это позволяет QQuickWindow работать даже на системах, где вообще нет API 3D-графики. Подробнее см. Адаптация Qt Quick к программной отрисовке.

Перенаправленная отрисовка

QQuickWindow необязательно поддерживается родным окном на экране. Отрисовка может быть перенаправлена на целевой пользовательский целевой объект отрисовки, например, на заданную родную текстуру. Это достигается в сочетании с классом QQuickRenderControl и функциями, такими как setRenderTarget(), setGraphicsDevice() и setGraphicsConfiguration().

В этом случае QQuickWindow представляет сцену и предоставляет инфраструктуру для отрисовки кадра. Он не будет поддерживаться циклом отрисовки и родным окном. Вместо этого в этом случае приложение управляет отрисовкой, фактически заменяя циклы отрисовки. Это позволяет генерировать последовательности изображений, отрисовывать в текстуры для использования во внешних 3D-движках или отрисовывать содержимое Qt Quick в среде виртуальной реальности.

Управление ресурсами

QML будет пытаться кэшировать изображения и узлы графа сцены для повышения производительности, но в некоторых сценариях с низкой памятью может потребоваться агрессивное освобождение этих ресурсов. Функция releaseResources() может быть использована для принудительной очистки определённых ресурсов, особенно тех, которые кэшируются и могут быть пересозданы позже, при необходимости.

Кроме того, вызов releaseResources() может привести к освобождению всего графа сцены и связанных графических ресурсов. Сигнал sceneGraphInvalidated() будет излучаться, когда это произойдёт. Это поведение контролируется функциями setPersistentGraphics() и setPersistentSceneGraph().

Примечание: Все классы с префиксом QSG должны использоваться только в потоке отрисовки графа сцены. Дополнительную информацию см. в Граф сцены и отрисовка.

Экспонирование и видимость

Когда экземпляр QQuickWindow намеренно скрыт с помощью hide() или setVisible(false), он прекратит отрисовку, а его граф сцены и контекст графики также могут быть освобождены. Это зависит от настроек, настроенных с помощью setPersistentGraphics() и setPersistentSceneGraph(). Поведение в этом отношении идентично явному вызову функции releaseResources(). Окно может стать неэкспонированным, другими словами, неотрисовываемым, и другими способами. Это зависит от платформы и системы окон. Например, на Windows сворачивание окна останавливает его отрисовку. На macOS полное затемнение окна другими окнами сверху вызывает то же самое. В Linux/X11 поведение зависит от менеджера окон.

Контекст OpenGL и форматы поверхности

Хотя можно указать QSurfaceFormat для каждого QQuickWindow, вызвав член-функцию setFormat(), окна также могут быть созданы из QML с использованием элементов Window и ApplicationWindow. В этом случае в создании экземпляра окна не участвует код C++, но приложения всё же могут захотеть установить определённые значения формата поверхности, например, запросить определённую версию или профиль OpenGL. Такие приложения могут вызвать статическую функцию QSurfaceFormat::setDefaultFormat() при запуске. Указанный формат будет использоваться для всех созданных после этого окон Quick.

Экземпляр Vulkan

При использовании Vulkan QQuickWindow автоматически ассоциируется с QVulkanInstance, который создаётся и управляется внутри графом сцены. Таким образом, большинству приложений не нужно беспокоиться о наличии VkInstance, так как всё происходит автоматически. В сложных случаях приложение может захотеть создать свой QVulkanInstance для настройки его определённым способом. Это тоже возможно. Вызов setVulkanInstance() для QQuickWindow сразу после создания, до его отображения, приводит к использованию предоставленного приложением QVulkanInstance (и лежащего в основе VkInstance). При перенаправлении через QQuickRenderControl автоматически не предоставляется QVulkanInstance, а приложение должно предоставить свой собственный и связать его с QQuickWindow.

Контексты и устройства графики

Когда граф сцены инициализируется, что обычно происходит, когда окно становится видимым или, в случае перенаправленной отрисовки, инициализация выполняется через QQuickRenderControl, необходимые для отрисовки контекстные или устройственные объекты создаются автоматически. Это включает контексты OpenGL, устройства и контексты устройств Direct3D, Vulkan и Metal. К ним также можно получить доступ из кода приложения после этого через QSGRendererInterface. При использовании basic цикла отрисовки, который выполняет всю отрисовку в потоке GUI, тот же контекст или устройство используется со всеми видимыми QQuickWindows. threaded цикл отрисовки использует отдельный контекст или объект устройства для каждого потока отрисовки, и, следовательно, для каждого QQuickWindow. В некоторых API графики имеется возможность настройки через setGraphicsConfiguration(). Это позволяет, например, указать список расширений Vulkan для включения в VkDevice. Кроме того, можно предоставить набор существующих контекстных или устройств графики для использования QQuickWindow вместо того, чтобы он создавал свои собственные. Это достигается с помощью setGraphicsDevice().

См. также QQuickView, QQuickRenderControl, QQuickRenderTarget, QQuickGraphicsDevice, QQuickGraphicsConfiguration и QSGRendererInterface.

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

перечисление QQuickWindow::CreateTextureOptionфлаги QQuickWindow::CreateTextureOptions

Перечисления CreateTextureOption используются для настройки того, как оборачивается текстура.

Постоянная Значение Описание
QQuickWindow::TextureHasAlphaChannel 0x0001 Текстура имеет альфа-канал и должна отображаться с использованием смешивания.
QQuickWindow::TextureHasMipmaps 0x0002 Текстура имеет mip-уровни и может отображаться с включённым mip-мапированием.
QQuickWindow::TextureOwnsGLTexture 0x0004 Начиная с Qt 6.0, этот флаг фактически не используется и игнорируется. Владение родственными ресурсами графики не передаётся оборачиваемому QSGTexture, так как Qt Quick может не иметь необходимых сведений о том, как освободить такой объект и связанную с ним память.
QQuickWindow::TextureCanUseAtlas 0x0008 Изображение может быть загружено в атлас текстур.
QQuickWindow::TextureIsOpaque 0x0010 Текстура вернёт false для QSGTexture::hasAlphaChannel() и не будет смешиваться. Этот флаг был добавлен в Qt 5.6.

Тип CreateTextureOptions является типом-синонимом для QFlags<CreateTextureOption>. Он хранит сочетание значений CreateTextureOption через операцию ИЛИ.

[since 5.4] перечисление QQuickWindow::RenderStage

Постоянная Значение Описание
QQuickWindow::BeforeSynchronizingStage 0 Перед синхронизацией.
QQuickWindow::AfterSynchronizingStage 1 После синхронизации.
QQuickWindow::BeforeRenderingStage 2 Перед отрисовкой.
QQuickWindow::AfterRenderingStage 3 После отрисовки.
QQuickWindow::AfterSwapStage 4 После обмена кадрами.
QQuickWindow::NoStage 5 Насколько это возможно. Это значение было добавлено в Qt 5.6.

Это перечисление было введено или изменено в Qt 5.4.

См. также Граф сцены и отрисовка.

[since 5.3] перечисление QQuickWindow::SceneGraphError

Это перечисление описывает ошибку в сигнале sceneGraphError().

Постоянная Значение Описание
QQuickWindow::ContextNotAvailable 1 Создание контекста графики не удалось. Это обычно означает, что не найдено подходящее реализация OpenGL, например, из-за отсутствия установленных драйверов графики, а значит, нет поддержки OpenGL 2. На мобильных и встраиваемых платах, использующих OpenGL ES, такая ошибка, вероятно, указывает на проблемы в интеграции системы окон и, возможно, неправильную конфигурацию Qt.

Это перечисление было введено или изменено в Qt 5.3.

[since 5.10] перечисление QQuickWindow::TextRenderType

Этот перечисление описывает тип рендеринга по умолчанию для текстовых элементов в Qt Quick (Текст, TextInput и т. д.).

Выберите NativeTextRendering, если вы хотите, чтобы текст выглядел по умолчанию на целевой платформе и не требуются расширенные функции, такие как преобразование текста. Использование таких функций в сочетании с типом рендеринга NativeTextRendering приведет к плохим, а иногда и размытым результатам.

class="valuelist">
Константа Значение Описание
QQuickWindow::QtTextRendering 0 Используйте собственный алгоритм растрирования Qt.
QQuickWindow::NativeTextRendering 1 Используйте собственный растризатор текста операционной системы.

Это перечисление было добавлено или изменено в Qt 5.10.

Документация свойств

[read-only] activeFocusItem : QQuickItem* const

Это свойство содержит элемент, который в данный момент имеет активный фокус или null если нет элемента с активным фокусом.

Функции доступа:

QQuickItem * activeFocusItem() const

Сигнал уведомления:

void activeFocusItemChanged()

color : QColor

Это свойство содержит цвет, используемый для очистки буфера цвета в начале каждого кадра.

По умолчанию цвет очистки - белый.

Функции доступа:

QColor color() const
void setColor(const QColor &color)

Сигнал уведомления:

void colorChanged(const QColor &)

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

[read-only] contentItem : QQuickItem* const

Это свойство содержит корневой невидимый элемент сцены.

У QQuickWindow всегда есть один невидимый корневой элемент, содержащий все его содержимое. Чтобы добавить элементы в это окно, измените родительский элемент на contentItem или на существующий элемент в сцене.

Функции доступа:

QQuickItem * contentItem() const

[since 5.13] transientParent : QWindow* const

Это свойство содержит окно, для которого это окно является всплывающим окном-дочерним элементом.

Это подсказка для менеджера окон, что это окно является диалоговым или всплывающим окном от имени родительского окна-дочернего элемента, которое может быть любого типа QWindow.

Для того, чтобы окно по умолчанию центрировалось над своим родительским окном-дочерним элементом, в зависимости от менеджера окон, также может потребоваться установить свойство flags с подходящим типом окна Qt::WindowType (например, Qt::Dialog).

Это свойство было добавлено в Qt 5.13.

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

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

QQuickWindow::QQuickWindow(QWindow *parent = nullptr)

Создаёт окно для отображения QML-сцены с родительским окном parent.

[signal, since 5.3] void QQuickWindow::afterAnimating()

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

В отличие от других похожих сигналов, этот сигнал испускается в потоке GUI, а не в потоке рендеринга. Его можно использовать для синхронизации внешних систем анимации с QML-содержимым. В то же время это означает, что этот сигнал не подходит для запуска графических операций.

Эта функция была добавлена в Qt 5.3.

[signal, since 6.0] void QQuickWindow::afterFrameEnd()

Этот сигнал испускается, когда граф сцены передал кадр. Этот сигнал испускается после всех других связанных сигналов, таких как afterRendering(). Это последний сигнал, который испускается потоком рендеринга графа сцены при рендеринге кадра.

Примечание: В отличие от frameSwapped(), этот сигнал гарантированно испускается и когда вывод Qt Quick перенаправляется через QQuickRenderControl.

Предупреждение: Этот сигнал испускается из потока рендеринга графа сцены. Если ваша функция-слот должна завершиться до продолжения выполнения, необходимо убедиться, что подключение является прямым (см. Qt::ConnectionType).

Эта функция была добавлена в Qt 6.0.

См. также beforeFrameBegin() и rendererInterface().

[signal, since 5.14] void QQuickWindow::afterRenderPassRecording()

Этот сигнал испускается после того, как граф сцены записал команды для своего основного прохода рендеринга, но проход ещё не завершен в буфере команд.

Этот сигнал испускается раньше, чем afterRendering(), и гарантирует, что не только кадр, но и запись основного прохода рендеринга графа сцены всё ещё активны. Это позволяет вставлять команды, не создавая целого отдельного прохода рендеринга (который, как правило, очищает прикреплённые изображения). Родные графические объекты можно запросить через QSGRendererInterface.

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

Предупреждение: Этот сигнал испускается из потока рендеринга графа сцены. Если ваша функция-слот должна завершиться до продолжения выполнения, необходимо убедиться, что подключение является прямым (см. Qt::ConnectionType).

Эта функция была добавлена в Qt 5.14.

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

[signal] void QQuickWindow::afterRendering()

Сигнал испускается после того, как граф сцены добавил свои команды в буфер команд, который ещё не отправлен в графическую очередь. Если это необходимо, функция-слот, подключенная к этому сигналу, может запросить родные ресурсы, такие как буфер команд, до этого через QSGRendererInterface. Однако обратите внимание, что проход рендеринга (или проходы) уже записаны на этом этапе, и добавить больше команд внутри прохода графа сцены невозможно. Вместо этого используйте afterRenderPassRecording() для этого. Этот сигнал имеет ограниченное применение в Qt 6, в отличие от Qt 5. Скорее, это сочетание beforeRendering() и beforeRenderPassRecording() или beforeRendering() и afterRenderPassRecording() обычно используется для достижения под- или наложения пользовательского рендеринга.

При использовании OpenGL контекст QOpenGLContext, используемый для рендеринга графом сцены, будет связан на этом этапе.

Предупреждение: Этот сигнал испускается из потока рендеринга графа сцены. Если ваша функция-слот должна завершиться до продолжения выполнения, необходимо убедиться, что подключение является прямым (см. Qt::ConnectionType).

Предупреждение: При использовании OpenGL имейте в виду, что установка специфичных для OpenGL 3.x или 4.x состояний и сохранение их включенными или установленными в значения, отличные от значений по умолчанию при возвращении из подключённого слота может повлиять на рендеринг графа сцены.

См. также rendererInterface(), Граф сцены - OpenGL под QML, Граф сцены - Metal под QML, Граф сцены - Vulkan под QML и Граф сцены - Direct3D 11 под QML.

[signal, since 5.3] void QQuickWindow::afterSynchronizing()

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

Этот сигнал можно использовать для подготовки, необходимой после вызовов QQuickItem::updatePaintNode(), в то время как поток GUI все ещё заблокирован.

При использовании OpenGL контекст QOpenGLContext, используемый для рендеринга графом сцены, будет связан на этом этапе.

Предупреждение: Этот сигнал испускается из потока рендеринга графа сцены. Если ваша функция-слот должна завершиться до продолжения выполнения, необходимо убедиться, что подключение является прямым (см. Qt::ConnectionType).

Предупреждение: При использовании OpenGL имейте в виду, что установка специфичных для OpenGL 3.x или 4.x состояний и сохранение их включенными или установленными в значения, отличные от значений по умолчанию при возвращении из подключённого слота может повлиять на рендеринг графа сцены.

Эта функция была добавлена в Qt 5.3.

[signal, since 6.0] void QQuickWindow::beforeFrameBegin()

Этот сигнал испускается перед тем, как граф сцены начнёт подготовку кадра. Он предшествует сигналам, таким как beforeSynchronizing() или beforeRendering(). Это самый ранний сигнал, который испускается потоком отрисовки графа сцены при подготовке нового кадра.

Этот сигнал актуален для графических фреймворков более низкого уровня, которым необходимо выполнить определённые операции, такие как очистка ресурсов, на стадии, когда Qt Quick ещё не инициировал запись нового кадра через API интерфейсов рендеринга.

Предупреждение: Этот сигнал испускается из потока отрисовки графа сцены. Если вашей функции-слоту необходимо завершиться перед продолжением выполнения, необходимо убедиться, что подключение является прямым (см. Qt::ConnectionType).

Эта функция была добавлена в Qt 6.0.

См. также afterFrameEnd() и rendererInterface().

[signal, since 5.14] void QQuickWindow::beforeRenderPassRecording()

Этот сигнал испускается перед тем, как граф сцены начнёт запись команд для основного прохода рендеринга. (У слоёв есть свои проходы, и они полностью записываются к моменту испускания этого сигнала.) Проход рендеринга уже активен в буфере команд при испускании сигнала.

Этот сигнал испускается позже, чем beforeRendering(), и гарантирует, что активен не только кадр, но и запись основного прохода рендеринга графа сцены. Это позволяет вставлять команды без необходимости генерировать целый отдельный проход рендеринга (что обычно приводит к очистке прикреплённых изображений). Родные графические объекты можно запросить через QSGRendererInterface.

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

Предупреждение: Этот сигнал испускается из потока отрисовки графа сцены. Если вашей функции-слоту необходимо завершиться перед продолжением выполнения, необходимо убедиться, что подключение является прямым (см. Qt::ConnectionType).

Эта функция была добавлена в Qt 5.14.

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

[signal] void QQuickWindow::beforeRendering()

Этот сигнал испускается после завершения подготовки кадра, что означает, что буфер команд находится в режиме записи, где это применимо. При необходимости, функция-слот, подключённая к этому сигналу, может запросить родные ресурсы, такие как команда перед, через QSGRendererInterface. Однако следует учесть, что запись основного прохода рендеринга ещё не началась на данном этапе, и невозможно добавить команды в этот проход. Начало прохода означает очистку буферов цвета, глубины и маски, поэтому невозможно достичь подложки типа рендеринга, просто подключившись к этому сигналу. Подключайтесь к beforeRenderPassRecording(). Однако подключение к этому сигналу всё ещё важно, если требуется запись копий команд, поскольку их нельзя поместить в очередь в пределах прохода рендеринга.

При использовании OpenGL, QOpenGLContext, используемый для рендеринга графом сцены, будет связан на этом этапе.

Предупреждение: Этот сигнал испускается из потока отрисовки графа сцены. Если вашей функции-слоту необходимо завершиться перед продолжением выполнения, необходимо убедиться, что подключение является прямым (см. Qt::ConnectionType).

Предупреждение: При использовании OpenGL следует учитывать, что установка специфичных для OpenGL 3.x или 4.x состояний и оставление их включенными или установленных в нестандартные значения при возвращении из подключённого слота может повлиять на рендеринг графа сцены.

См. также rendererInterface(), Граф сцены - OpenGL под QML, Граф сцены - Metal под QML, Граф сцены - Vulkan под QML и Граф сцены - Direct3D 11 под QML.

[signal] void QQuickWindow::beforeSynchronizing()

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

Несмотря на то, что сигнал испускается из потока отрисовки графа сцены, гарантируется, что поток пользовательского интерфейса заблокирован, как это происходит в QQuickItem::updatePaintNode(). Поэтому безопасно обращаться к данным потока пользовательского интерфейса в слоте или лямбда-выражении, подключенном с Qt::DirectConnection.

Этот сигнал можно использовать для выполнения необходимой подготовки перед вызовами QQuickItem::updatePaintNode().

При использовании OpenGL, QOpenGLContext, используемый для рендеринга графом сцены, будет связан на этом этапе.

Предупреждение: Этот сигнал испускается из потока отрисовки графа сцены. Если вашей функции-слоту необходимо завершиться перед продолжением выполнения, необходимо убедиться, что подключение является прямым (см. Qt::ConnectionType).

Предупреждение: При использовании OpenGL следует учитывать, что установка специфичных для OpenGL 3.x или 4.x состояний и оставление их включенными или установленных в нестандартные значения при возвращении из подключённого слота может повлиять на рендеринг графа сцены.

[signal, since 5.1] void QQuickWindow::closing(QQuickCloseEvent *close)

Этот сигнал испускается, когда окно получает событие close от системы окон.

На macOS Qt создаст пункт меню Quit если нет пункта меню с текстом «Выход» или «Закрыть». Этот пункт меню вызывает сигнал QCoreApplication::quit, а не сигнал QQuickWindow::closing().

Эта функция была добавлена в Qt 5.1.

См. также QMenuBar в качестве глобальной панели меню.

[signal] void QQuickWindow::frameSwapped()

Этот сигнал испускается, когда кадр помещён в очередь для презентации. При включённой вертикальной синхронизации сигнал испускается не более одного раза за интервал vsync в постоянно анимируемой сцене.

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

[slot] void QQuickWindow::releaseResources()

Эта функция пытается освободить избыточные ресурсы, в настоящее время удерживаемые сценой QML.

Вызов этой функции запрашивает у графа сцены освободить кэшированные графические ресурсы, такие как объекты графической конвейерной обработки или программы шейдеров.

Примечание: Освобождение кэшированных графических ресурсов не зависит от подсказки из setPersistentGraphics().

Кроме того, в зависимости от используемого цикла рендеринга, эта функция может также привести к освобождению графа сцены и всех графических ресурсов. Если это произойдёт, будет испущен сигнал sceneGraphInvalidated(), позволяющий пользователям очистить собственные графические ресурсы. Функции setPersistentGraphics() и setPersistentSceneGraph() могут быть использованы для предотвращения этого, если обработка очистки невозможна в приложении, но с ценой более высокого использования памяти.

См. также sceneGraphInvalidated(), setPersistentGraphics() и setPersistentSceneGraph().

[signal, since 5.3] void QQuickWindow::sceneGraphAboutToStop()

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

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

Предупреждение: Этот сигнал испускается из потока рендеринга графа сцены. Если вашей функции-слоту необходимо завершиться перед продолжением выполнения, необходимо убедиться, что подключение является прямым (см. Qt::ConnectionType).

Предупреждение: Убедитесь, что обработчик сигнала sceneGraphAboutToStop() оставляет графический контекст в том же состоянии, что и при входе в обработчик сигнала. Несоблюдение этого может привести к неправильной отрисовке сцены.

Эта функция была добавлена в Qt 5.3.

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

[signal, since 5.3] void QQuickWindow::sceneGraphError(QQuickWindow::SceneGraphError error, const QString &message)

Этот сигнал испускается, когда во время инициализации графа сцены произошла ошибка.

Приложения должны подключаться к этому сигналу, если они хотят обрабатывать ошибки, такие как сбои в создании графического контекста, в пользовательском стиле. Когда ни один слот не подключён к сигналу, поведение будет другим: Quick выведет message или отобразит диалоговое окно с сообщением и завершит приложение.

Этот сигнал будет испускаться из потока пользовательского интерфейса.

Эта функция была добавлена в Qt 5.3.

[signal] void QQuickWindow::sceneGraphInitialized()

Этот сигнал испускается, когда граф сцены был инициализирован.

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

[signal] void QQuickWindow::sceneGraphInvalidated()

Этот сигнал испускается, когда граф сцены был проинициализирован.

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

При рендеринге с помощью OpenGL, QOpenGLContext этого окна будет связан при вызове этой функции. Исключением является случай, если родной OpenGL был уничтожен вне контроля Qt, например, через EGL_CONTEXT_LOST.

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

[slot] void QQuickWindow::update()

Планирует отображение следующего кадра окна.

Вызов QQuickWindow::update() отличается от QQuickItem::update() тем, что всегда инициирует перерисовку, независимо от изменений в базовом дереве сцены.

[override virtual] QQuickWindow::~QQuickWindow()

Уничтожает окно.

[override virtual] QAccessibleInterface *QQuickWindow::accessibleRoot() const

Возвращает интерфейс доступности для этого окна или 0, если такой интерфейс создать невозможно.

[since 5.14] void QQuickWindow::beginExternalCommands()

При смешении команд графического API (OpenGL, Vulkan, Metal и т.д.) с рендерингом на основе дерева сцен, необходимо вызвать эту функцию перед записью команд в буфер команд, используемый деревом сцены для рендеринга основного прохода. Это предотвращает перезапись состояния.

На практике эта функция часто вызывается из слота, подключенного к сигналам beforeRenderPassRecording() или afterRenderPassRecording().

Функция не требуется, если команды записываются в собственный буфер команд приложения (например, VkCommandBuffer или MTLCommandBuffer + MTLRenderCommandEncoder, созданные и управляемые приложением, а не полученные из дерева сцены). В графических API, где концепция буфера команд не реализована напрямую (OpenGL, Direct 3D 11), функции beginExternalCommands() и endExternalCommands() вместе обеспечивают замену функции resetOpenGLState() Qt 5.

Вызов этой функции и endExternalCommands() не требуется внутри реализации render() узла QSGRenderNode, так как дерево сцены неявно выполняет необходимые шаги для узлов рендеринга.

Доступ к объектам графического API (таким как графический адаптер, буфер команд или кодировщик) осуществляется через QSGRendererInterface::getResource().

Предупреждение: Обратите внимание на то, что QSGRendererInterface::CommandListResource может возвращать другой объект между beginExternalCommands() и endExternalCommands(). Это может происходить, когда подлежащая реализация предоставляет отдельный вторичный буфер команд для записи внешних графических команд внутри прохода рендеринга. Поэтому всегда запрашивайте CommandListResource после вызова этой функции. Не пытайтесь повторно использовать объект из предыдущего запроса.

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

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

См. также endExternalCommands() и QQuickOpenGLUtils::resetOpenGLState().

[override virtual protected] void QQuickWindow::closeEvent(QCloseEvent *e)

Переопределяет: QWindow::closeEvent(QCloseEvent *ev).

[since 5.8] QSGImageNode *QQuickWindow::createImageNode() const

Создает простой узел изображения. Если дерево сцены не инициализировано, возвращается значение null.

Это кросс-платформенная альтернатива прямому созданию QSGSimpleTextureNode.

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

См. также QSGImageNode.

[since 5.8] QSGNinePatchNode *QQuickWindow::createNinePatchNode() const

Создает узел девяти областей. Если дерево сцены не инициализировано, возвращается значение null.

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

[since 5.8] QSGRectangleNode *QQuickWindow::createRectangleNode() const

Создает простой прямоугольный узел. Если дерево сцены не инициализировано, возвращается значение null.

Это кросс-платформенная альтернатива прямому созданию QSGSimpleRectNode.

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

См. также QSGRectangleNode.

QSGTexture *QQuickWindow::createTextureFromImage(const QImage &image, QQuickWindow::CreateTextureOptions options) const

Создаёт новую текстуру QSGTexture из переданного изображения image. Если изображение имеет альфа-канал, соответствующая текстура также будет иметь альфа-канал.

Вызывающая функция отвечает за удаление возвращённой текстуры. Соответствующий родной объект текстуры также уничтожается вместе с QSGTexture.

Если параметр options содержит TextureCanUseAtlas, движок может поместить изображение в атлас текстур. Текстуры в атласе должны полагаться на QSGTexture::normalizedTextureSubRect() для геометрии и не будут поддерживать QSGTexture::Repeat. Другие значения из CreateTextureOption игнорируются.

Если параметр options содержит TextureIsOpaque, движок создаст текстуру RGB, которая вернёт false для QSGTexture::hasAlphaChannel(). Непрозрачные текстуры в большинстве случаев рендерятся быстрее. Если этот флаг не установлен, текстура будет иметь альфа-канал, основанный на формате изображения.

Если параметр options содержит TextureHasMipmaps, движок создаст текстуру, которая может использовать фильтрацию mipmap. Мипмапированные текстуры не могут быть в атласе.

Если дерево сцены использует OpenGL, возвращаемая текстура будет использовать GL_TEXTURE_2D в качестве целевого типа текстуры и GL_RGBA в качестве внутреннего формата. В других графических API формат текстуры обычно RGBA8. Переопределите QSGTexture для создания текстур с различными параметрами.

Предупреждение: Эта функция вернёт 0, если дерево сцены ещё не инициализировано.

Предупреждение: Возвращаемая текстура не управляется памятью дерева сцены и должна быть явно удалена вызывающей стороной в потоке рендеринга. Это достигается путём удаления текстуры из деструктора QSGNode или использованием deleteLater() в случае, если текстура уже связана с потоком рендеринга.

Функцию можно вызывать из любого потока.

См. также sceneGraphInitialized() и QSGTexture.

QSGTexture *QQuickWindow::createTextureFromImage(const QImage &image) const

Это перегруженная функция.

qreal QQuickWindow::effectiveDevicePixelRatio() const

Возвращает коэффициент масштаба пикселей устройства для этого окна.

Это отличается от QWindow::devicePixelRatio(), так как поддерживает перенаправленный рендеринг через QQuickRenderControl. При использовании QQuickRenderControl, QQuickWindow часто не создаётся, что означает, что он никогда не отображается и нет базового нативного окна в системе окон. В результате, запросы свойств, таких как коэффициент масштаба пикселей устройства, не могут дать правильных результатов. Используйте эту функцию вместо этого.

См. также QWindow::devicePixelRatio().

[since 5.14] void QQuickWindow::endExternalCommands()

При смешении команд графического API (OpenGL, Vulkan, Metal и т.д.) с рендерингом на основе дерева сцен, необходимо вызвать эту функцию после записи команд в буфер команд, используемый деревом сцены для рендеринга основного прохода. Это предотвращает перезапись состояния.

На практике эта функция часто вызывается из слота, подключенного к сигналам beforeRenderPassRecording() или afterRenderPassRecording().

Функция не требуется, если команды записываются в собственный буфер команд приложения (например, VkCommandBuffer или MTLCommandBuffer + MTLRenderCommandEncoder, созданные и управляемые приложением, а не полученные из дерева сцены). В графических API, где концепция буфера команд не реализована напрямую (OpenGL, Direct 3D 11), функции beginExternalCommands() и endExternalCommands() вместе обеспечивают замену функции resetOpenGLState() Qt 5.

Вызов этой функции и beginExternalCommands() не требуется внутри реализации render() узла QSGRenderNode, так как дерево сцены неявно выполняет необходимые шаги для узлов рендеринга.

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

См. также beginExternalCommands() и QQuickOpenGLUtils::resetOpenGLState().

[override virtual protected] bool QQuickWindow::event(QEvent *e)

Переопределяет: QWindow::event(QEvent *ev).

[override virtual protected] void QQuickWindow::exposeEvent(QExposeEvent *)

Переопределяет: QWindow::exposeEvent(QExposeEvent *ev).

[override virtual protected] void QQuickWindow::focusInEvent(QFocusEvent *ev)

Переопределяет: QWindow::focusInEvent(QFocusEvent *ev).

[override virtual protected] void QQuickWindow::focusOutEvent(QFocusEvent *ev)

Переопределяет: QWindow::focusOutEvent(QFocusEvent *ev).

QImage QQuickWindow::grabWindow()

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

Возможен вызов функции grabWindow(), когда окно не отображается. Для этого необходимо, чтобы окно было создано, имело корректные размеры и ни одно другое окно QQuickWindow не рендерилось в том же процессе.

Примечание: При использовании этого окна в сочетании с QQuickRenderControl результат этой функции — пустое изображение, если не используется software бэкенд. Это связано с тем, что при перенаправлении вывода в управляемый приложением графический ресурс (например, текстуру) с помощью QQuickRenderControl и setRenderTarget(), приложение лучше подходит для управления и выполнения потенциальной операции чтения, поскольку оно полностью контролирует этот ресурс с самого начала.

Предупреждение: Вызов этой функции может привести к проблемам производительности.

Предупреждение: Этот метод может вызываться только из потока GUI.

[static, since 6.0] QSGRendererInterface::GraphicsApi QQuickWindow::graphicsApi()

Возвращает графический API, который будет использоваться графическим деревом, если он был инициализирован на данный момент.

Стандартный способ запроса API, используемого графическим деревом, — использование QSGRendererInterface::graphicsApi() после инициализации графического дерева, например, при или после выдачи сигнала sceneGraphInitialized(). В этом случае вы получите истинное значение, поскольку тогда известно, что всё было инициализировано правильно с использованием этого графического API.

Это не всегда удобно. Если приложение должно настраивать внешние фреймворки или работать с setGraphicsDevice() таким образом, который зависит от встроенной логики выбора API графического дерева, то не всегда возможно отложить такие операции до того, как окно QQuickWindow будет отображено или вызов QQuickRenderControl::initialize().

Поэтому предоставляется эта статическая функция, как аналог setGraphicsApi(): её можно вызывать в любое время, и результат отражает тот API, который выберет графическое дерево, если оно было инициализировано в момент вызова.

Примечание: Этот статический метод предназначен для вызова только в главном (GUI) потоке. Для запроса API во время рендеринга используйте QSGRendererInterface, так как этот объект живёт в потоке рендеринга.

Примечание: Эта функция не учитывает бэкэнды графического дерева.

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

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

[since 6.0] QQuickGraphicsConfiguration QQuickWindow::graphicsConfiguration() const

Возвращает QQuickGraphicsDevice, переданный в setGraphicsDevice(), или объект по умолчанию в противном случае.

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

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

[since 6.0] QQuickGraphicsDevice QQuickWindow::graphicsDevice() const

Возвращает QQuickGraphicsDevice, переданный в setGraphicsDevice(), или объект по умолчанию в противном случае.

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

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

const QQuickWindow::GraphicsStateInfo &QQuickWindow::graphicsStateInfo()

Возвращает ссылку на структуру GraphicsStateInfo, описывающую часть внутренней информации RHI, в частности, состояние буферизации с двойным или тройным буфером бэкенда (например, интеграции Vulkan или Metal). Это актуально, когда подлежащий графический API — Vulkan или Metal, и внешний код рендеринга хочет выполнить буферизацию с двойным или тройным буфером собственных часто меняющихся ресурсов, таких как буферы униформ, чтобы избежать блокирования конвейера.

[static, since 5.1] bool QQuickWindow::hasDefaultAlphaBuffer()

Возвращает значение, определяющее, использовать ли альфа-прозрачность для вновь созданных окон.

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

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

[override virtual protected] void QQuickWindow::hideEvent(QHideEvent *)

Переопределяет: QWindow::hideEvent(QHideEvent *ev).

QQmlIncubationController *QQuickWindow::incubationController() const

Возвращает контроллер инкубации, который вставляет инкубацию между кадрами для данного окна. QQuickView автоматически устанавливает этот контроллер, в противном случае вам необходимо установить его самостоятельно с помощью QQmlEngine::setIncubationController().

Контроллер принадлежит окну и будет уничтожен при удалении окна.

bool QQuickWindow::isPersistentGraphics() const

Возвращает значение, определяющее, могут ли быть освобождены важные графические ресурсы в течение жизни окна QQuickWindow.

Примечание: Это подсказка, и не гарантируется, что она будет учтена.

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

bool QQuickWindow::isPersistentSceneGraph() const

Возвращает значение, определяющее, могут ли быть освобождены узлы и ресурсы графического дерева в течение жизни этого окна QQuickWindow.

Примечание: Это подсказка. Время и способ этого зависят от реализации.

bool QQuickWindow::isSceneGraphInitialized() const

Возвращает true, если графическое дерево было инициализировано; иначе возвращает false.

[override virtual protected] void QQuickWindow::keyPressEvent(QKeyEvent *e)

Переопределяет: QWindow::keyPressEvent(QKeyEvent *ev).

[override virtual protected] void QQuickWindow::keyReleaseEvent(QKeyEvent *e)

Переопределяет: QWindow::keyReleaseEvent(QKeyEvent *ev).

[override virtual protected] void QQuickWindow::mouseDoubleClickEvent(QMouseEvent *event)

Переопределяет: QWindow::mouseDoubleClickEvent(QMouseEvent *ev).

[override virtual protected] void QQuickWindow::mouseMoveEvent(QMouseEvent *event)

Переопределяет: QWindow::mouseMoveEvent(QMouseEvent *ev).

[override virtual protected] void QQuickWindow::mousePressEvent(QMouseEvent *event)

Переопределяет: QWindow::mousePressEvent(QMouseEvent *ev).

[override virtual protected] void QQuickWindow::mouseReleaseEvent(QMouseEvent *event)

Переопределяет: QWindow::mouseReleaseEvent(QMouseEvent *ev).

[since 6.0] QQuickRenderTarget QQuickWindow::renderTarget() const

Возвращает QQuickRenderTarget, переданный в setRenderTarget(), или объект по умолчанию в противном случае.

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

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

[since 5.8] QSGRendererInterface *QQuickWindow::rendererInterface() const

Возвращает текущий интерфейс рендерера. Значение всегда валидно и никогда не равно null.

Примечание: Этот метод можно вызывать в любое время после создания QQuickWindow, даже когда isSceneGraphInitialized() всё ещё false. Однако некоторые функции интерфейса рендерера, в частности, QSGRendererInterface::getResource(), не будут функциональны до тех пор, пока графическое дерево не будет запущено. Запросы бэкенда, такие как QSGRendererInterface::graphicsApi() или QSGRendererInterface::shaderType(), всегда будут функциональны, с другой стороны.

Примечание: Владение возвращённым указателем остаётся за Qt. Возвращённый экземпляр может или не может быть совмещён между разными экземплярами QQuickWindow, в зависимости от используемого бэкенда графического дерева. Поэтому приложения должны запрашивать интерфейсный объект для каждого QQuickWindow вместо повторного использования уже запрошенного указателя.

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

См. также QSGRenderNode и QSGRendererInterface.

END_OF_DOCUMENT_MARKER

[override virtual protected] void QQuickWindow::resizeEvent(QResizeEvent *ev)

Переопределяет: QWindow::resizeEvent(QResizeEvent *ev).

[static, since 5.9] QString QQuickWindow::sceneGraphBackend()

Возвращает запрошенный бэкенд Qt Quick для сцены.

Примечание: Значение, возвращаемое этой функцией, может быть устаревшим последующими вызовами setSceneGraphBackend(), пока не будет создан первый QQuickWindow в приложении.

Примечание: Значение отражает только запрос в переменной среды QT_QUICK_BACKEND после создания QQuickWindow.

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

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

[since 5.4] void QQuickWindow::scheduleRenderJob(QRunnable *job, QQuickWindow::RenderStage stage)

Планирует выполнение job, когда отрисовка этого окна достигнет заданной стадии stage.

Это удобный способ для задач «один раз» в эквивалентных сигналах QQuickWindow.

Окно берет на себя владение job и удалит его при завершении задачи.

Если отрисовка будет остановлена, прежде чем job успеет выполниться, задача будет выполнена и удалена как часть очистки сцены. Если окно никогда не отображается и отрисовка не происходит до уничтожения QQuickWindow, все ожидающие задачи будут уничтожены без вызова метода run().

Если отрисовка происходит в другом потоке, то задача будет выполнена в потоке отрисовки.

Если stage равен NoStage, job будет выполнен при первой возможности, когда поток отрисовки не занят отрисовкой кадра. Если окно не отображается и не может быть отрисовано в момент публикации или обработки задачи, задача удаляется без выполнения метода run(). Если используется не-потоковый рендерер, метод run() задачи выполняется синхронно. При отрисовке с OpenGL контекст OpenGL изменяется на контекст рендерера перед выполнением любой задачи, включая задачи NoStage.

Примечание: Эта функция не запускает отрисовку; задачи, нацеленные на любую стадию, отличную от NoStage, будут сохранены до тех пор, пока отрисовка не будет инициирована где-либо ещё. Чтобы заставить задачу выполнитьс ранее, вызовите QQuickWindow::update();

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

См. также beforeRendering(), afterRendering(), beforeSynchronizing(), afterSynchronizing(), frameSwapped() и sceneGraphInvalidated().

[static, since 5.1] void QQuickWindow::setDefaultAlphaBuffer(bool useAlpha)

useAlpha указывает, использовать ли альфа-прозрачность для вновь созданных окон.

В любом приложении, которое ожидает создания полупрозрачных окон, необходимо установить это значение в true до создания первого QQuickWindow. Значение по умолчанию — false.

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

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

[static, since 5.8] void QQuickWindow::setGraphicsApi(QSGRendererInterface::GraphicsApi api)

Запрашивает указанный графический api.

При использовании встроенной адаптации графики, api указывает, какой графический API (OpenGL, Vulkan, Metal или Direct3D) должна использовать сцена для отрисовки. Кроме того, software бэкенд также встроен и может быть запрошен, установив api в QSGRendererInterface::Software.

В отличие от setSceneGraphBackend(), которая может использоваться только для запроса определенного бэкенда (доставляемого либо встроенного, либо установленного как динамически загружаемые плагины), эта функция работает с более высоким уровнем концепции графических API. Она охватывает бэкенды, поставляемые с Qt Quick, и, следовательно, имеет соответствующие значения в перечислении QSGRendererInterface::GraphicsApi.

Если эта функция не вызывается вообще, и эквивалентная переменная среды QSG_RHI_BACKEND также не установлена, сцена выберет графический API для использования на основе платформы.

Эта функция становится важной в приложениях, которые подготовлены только для отрисовки с заданным API. Например, если приложение выполняет нативную отрисовку OpenGL или Vulkan, оно захочет убедиться, что Qt Quick также использует OpenGL или Vulkan. Такие приложения должны вызвать эту функцию на ранней стадии функции main().

Примечание: Вызов функции должен произойти до создания первого QQuickWindow в приложении. Графический API не может быть изменён после этого.

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

Чтобы узнать, какой графический API использует сцена для отрисовки, используйте QSGRendererInterface::graphicsApi() после того, как сцена инициализирована, что обычно происходит либо когда окно впервые становится видимым, либо когда вызывается QQuickRenderControl::initialize().

Чтобы вернуться к поведению по умолчанию, где сцена выбирает графический API на основе платформы и других условий, установите api в QSGRendererInterface::Unknown.

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

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

[since 6.0] void QQuickWindow::setGraphicsConfiguration(const QQuickGraphicsConfiguration &config)

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

Такая дополнительная конфигурация, например, указывающая, какие расширения устройств нужно включить для Vulkan, становится актуальной и необходимой при интеграции кода нативного графического рендеринга, который зависит от определённых расширений. То же самое справедливо при интеграции с внешними 3D или VR движками, такими как OpenXR.

Примечание: Конфигурация игнорируется при адаптации существующих графических устройств через setGraphicsDevice(), так как сцена не контролирует фактическое создание этих объектов.

Экземпляры QQuickGraphicsConfiguration неявно разделяются, копируются и могут передаваться по значению.

Предупреждение: Установка QQuickGraphicsConfiguration на QQuickWindow должна выполняться достаточно рано, до первой инициализации сцены для этого окна. В случае окон на экране это означает, что вызов должен выполняться до вызова show() на QQuickWindow или QQuickView. В случае QQuickRenderControl конфигурация должна быть завершена перед вызовом initialize().

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

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

[since 6.0] void QQuickWindow::setGraphicsDevice(const QQuickGraphicsDevice &device)

Устанавливает объекты графического устройства для этого окна. Сцена будет использовать существующие устройства, физические устройства и другие объекты, указанные в device, вместо создания новых.

Эта функция очень часто используется в сочетании с QQuickRenderControl и setRenderTarget() для перенаправления отрисовки Qt Quick в текстуру.

По умолчанию созданное QQuickGraphicsDevice не изменяет поведение по умолчанию. После того как QQuickGraphicsDevice создано через одну из функций-фабрик QQuickGraphicsDevice, таких как QQuickGraphicsDevice::fromDeviceObjects(), и сцена использует соответствующий графический API (в примере fromDeviceObjects() это Vulkan), сцена будет использовать существующие объекты устройства (например, VkPhysicalDevice, VkDevice, и индекс семейства графических очередей в случае Vulkan), инкапсулированные в QQuickGraphicsDevice. Это позволяет использовать одно и то же устройство и, таким образом, совместно использовать ресурсы, такие как буферы и текстуры, между Qt Quick и нативными движками рендеринга.

Предупреждение: Эта функция может быть вызвана только до инициализации сцены и не будет иметь эффекта, если вызвана после. На практике это обычно означает вызов её прямо перед QQuickRenderControl::initialize().

Пример использования с Direct3D:

// native graphics resources set up by a custom D3D rendering engine
ID3D11Device *device;
ID3D11DeviceContext *context;
ID3D11Texture2D *texture;
...
// now to redirect Qt Quick content into 'texture' we could do the following:
QQuickRenderControl *renderControl = new QQuickRenderControl;
QQuickWindow *window = new QQuickWindow(renderControl); // this window will never be shown on-screen
...
window->setGraphicsDevice(QQuickGraphicsDevice::fromDeviceAndContext(device, context));
renderControl->initialize();
window->setRenderTarget(QQuickRenderTarget::fromD3D11Texture(texture, textureSize);
...

Ключевым аспектом использования этой функции является обеспечение того, чтобы ресурсы или дескрипторы ресурсов, такие как texture в приведённом выше примере, были видимы и доступны как для внешнего движка рендеринга, так и для рендерера сцены. Для этого необходимо использовать одно и то же графическое устройство (или, в случае OpenGL, один и тот же контекст OpenGL).

Экземпляры QQuickGraphicsDevice неявно разделяются, копируются и могут передаваться по значению. Они не владеют связанными нативными объектами (такими как, ID3D11Device в примере).

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

Эта функция была добавлена в Qt 6.0.

См. также graphicsDevice(), QQuickRenderControl, setRenderTarget() и setGraphicsApi().

void QQuickWindow::setPersistentGraphics(bool persistent)

Устанавливает, должны ли графические ресурсы (графическое устройство или контекст, swapchain, буферы, текстуры) сохраняться и не могут быть освобождены до удаления последнего окна, на значение persistent. Значение по умолчанию — true.

При вызове releaseResources() или при скрытии окна (точнее, при отсутствии возможности отрисовки), некоторые циклы рендеринга могут освободить все графические ресурсы, а не только кэшированные. Это может временно освободить память, но также означает, что движку рендеринга придётся выполнить полную, потенциально дорогостоящую повторную инициализацию ресурсов, когда окно потребует повторного рендеринга.

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

Примечание: Все графические ресурсы освобождаются при удалении последнего QQuickWindow, независимо от этого параметра.

Примечание: Это подсказка, и нет гарантии, что она будет учтена.

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

См. также isPersistentGraphics(), setPersistentSceneGraph(), sceneGraphInitialized(), sceneGraphInvalidated() и releaseResources().

void QQuickWindow::setPersistentSceneGraph(bool persistent)

Устанавливает, являются ли узлы и ресурсы графа сцены persistent. Persistent означает, что узлы и ресурсы не могут быть освобождены. Значение по умолчанию — true.

При вызове releaseResources() или при скрытии окна (точнее, при отсутствии возможности отрисовки), некоторые циклы рендеринга могут освободить узлы графа сцены и связанные с ними графические ресурсы. Это временно освобождает память, но также означает, что граф сцены должен быть перестроен при следующем рендеринге окна.

Примечание: Узлы и ресурсы графа сцены всегда освобождаются при удалении последнего QQuickWindow, независимо от этого параметра.

Примечание: Это подсказка, и нет гарантии, что она будет учтена.

См. также isPersistentSceneGraph(), setPersistentGraphics(), sceneGraphInvalidated(), sceneGraphInitialized() и releaseResources().

[since 6.0] void QQuickWindow::setRenderTarget(const QQuickRenderTarget &target)

Устанавливает целевой объект отрисовки для этого окна на target.

QQuickRenderTarget служит неявной ссылкой на рендерируемый объект, обычно 2D текстуру, и связанную метаданные, такую как размер в пикселях.

Значение по умолчанию QQuickRenderTarget означает отсутствие перенаправления. В то же время, валидная target, созданная с помощью одной из статических функций-фабрик QQuickRenderTarget, позволяет перенаправить рендеринг сцены Qt Quick: он больше не будет нацелен на цветовые буферы поверхности, связанной с окном, а на текстуры или другие графические объекты, указанные в target.

Например, предположим, что граф сцены использует Vulkan для рендеринга; можно перенаправить его вывод в VkImage. Для графических API, таких как Vulkan, также необходимо указать макет изображения. Экземпляры QQuickRenderTarget неявно общие, копируемые и могут передаваться по значению. Однако они не владеют связанными нативными объектами (например, VkImage в примере).

QQuickRenderTarget rt = QQuickRenderTarget::fromVulkanImage(vulkanImage, VK_IMAGE_LAYOUT_PREINITIALIZED, pixelSize);
quickWindow->setRenderTarget(rt);
Эта функция часто используется в сочетании с QQuickRenderControl и невидимым QQuickWindow для рендеринга содержимого Qt Quick в текстуру без создания нативного окна на экране для этого QQuickWindow.

Если желаемый целевой объект или связанные данные, такие как размер, изменяются, вызовите эту функцию с новым QQuickRenderTarget. Создание экземпляров QQuickRenderTarget и вызов этой функции недорогие, но будьте внимательны: установка нового target с другим нативным объектом или другими данными может привести к потенциально дорогостоящим шагам инициализации при подготовке графа сцены к рендерингу следующего кадра. Поэтому изменяйте целевой объект только по необходимости.

Примечание: Эта функция не должна использоваться при использовании software бэкэнда. Вместо этого используйте grabWindow() для рендеринга содержимого в QImage.

Примечание: Окно не получает владения нативными объектами, на которые ссылается target.

Примечание: Ответственность за обеспечение валидности нативных объектов, на которые ссылается target, для рендерера графа сцены лежит на вызывающей стороне. Например, с Vulkan, Metal и Direct3D это означает, что текстура или изображение создаются на том же графическом устройстве, которое используется графом сцены внутри. Поэтому, когда участвуют объекты текстур, созданные на уже существующем устройстве или контексте, эта функция часто используется в сочетании с setGraphicsDevice().

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

Предупреждение: Эта функция может вызываться только из потока, выполняющего рендеринг.

Эта функция была добавлена в Qt 6.0.

См. также renderTarget(), QQuickRenderControl, setGraphicsDevice() и setGraphicsApi().

[static, since 5.8] void QQuickWindow::setSceneGraphBackend(const QString &backend)

Запрашивает бэкэнд графа сцены Qt Quick. Бэкэнды могут быть встроенными или установлены в виде динамически загружаемых плагинов.

Это перегруженная функция.

Примечание: Вызов функции должен произойти до создания первого QQuickWindow в приложении. Его нельзя изменить после этого.

См. Переключение между адаптациями в вашем приложении для получения дополнительной информации о списке бэкэндов. Если backend недействителен или возникает ошибка, запрос игнорируется.

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

Эта функция была добавлена в Qt 5.8.

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

[static, since 5.10] void QQuickWindow::setTextRenderType(QQuickWindow::TextRenderType renderType)

Устанавливает тип рендеринга по умолчанию для текстовых элементов в Qt Quick на renderType.

Примечание: установка типа рендеринга повлияет только на элементы, созданные после этого; тип рендеринга существующих элементов не изменится.

Эта функция была добавлена в Qt 5.10.

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

[override virtual protected] void QQuickWindow::showEvent(QShowEvent *)

Переопределяет: QWindow::showEvent(QShowEvent *ev).

[override virtual protected] void QQuickWindow::tabletEvent(QTabletEvent *event)

Переопределяет: QWindow::tabletEvent(QTabletEvent *ev).

[static, since 5.10] QQuickWindow::TextRenderType QQuickWindow::textRenderType()

Возвращает тип рендеринга текстовых элементов в Qt Quick. По умолчанию — QQuickWindow::QtTextRendering.

Эта функция была добавлена в Qt 5.10.

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

[override virtual protected] void QQuickWindow::wheelEvent(QWheelEvent *event)

Переопределяет: QWindow::wheelEvent(QWheelEvent *ev).

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

Spec-Zone.ru

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