Spec-Zone.ru › Qt

Класс QQuickWidget

Класс QQuickWidget предоставляет виджет для отображения пользовательского интерфейса Qt Quick. Подробнее...

Заголовок: #include <QQuickWidget>
CMake: find_package(Qt6 COMPONENTS QuickWidgets REQUIRED) target_link_libraries(mytarget PRIVATE Qt6::QuickWidgets)
qmake: QT += quickwidgets
С момента: Qt 5.3
Наследует: QWidget
  • Список всех членов, включая унаследованные

Открытые типы

Перечисление ResizeMode { SizeViewToRootObject, SizeRootObjectToView }
Перечисление Status { Null, Ready, Loading, Error }

Свойства

  • resizeMode : ResizeMode
  • source : QUrl
  • status : const Status

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

QQuickWidget(const QUrl &source, QWidget *parent = nullptr)
QQuickWidget(QQmlEngine *engine, QWidget *parent)
QQuickWidget(QWidget *parent = nullptr)
virtual ~QQuickWidget() override
QQmlEngine * engine() const
QList<QQmlError> errors() const
QSurfaceFormat format() const
QImage grabFramebuffer() const
QSize initialSize() const
QQuickWindow * quickWindow() const
QQuickWidget::ResizeMode resizeMode() const
QQmlContext * rootContext() const
QQuickItem * rootObject() const
void setClearColor(const QColor &color)
void setFormat(const QSurfaceFormat &format)
void setResizeMode(QQuickWidget::ResizeMode)
QUrl source() const
QQuickWidget::Status status() const

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

void setSource(const QUrl &url)

Сигналы

void sceneGraphError(QQuickWindow::SceneGraphError error, const QString &message)
void statusChanged(QQuickWidget::Status status)

Переопределенные защищенные функции

virtual void dragEnterEvent(QDragEnterEvent *e) override
virtual void dragLeaveEvent(QDragLeaveEvent *e) override
virtual void dragMoveEvent(QDragMoveEvent *e) override
virtual void dropEvent(QDropEvent *e) override
virtual bool event(QEvent *e) override
virtual void focusInEvent(QFocusEvent *event) override
virtual bool focusNextPrevChild(bool next) override
virtual void focusOutEvent(QFocusEvent *event) override
virtual void hideEvent(QHideEvent *) override
virtual void keyPressEvent(QKeyEvent *e) override
virtual void keyReleaseEvent(QKeyEvent *e) override
virtual void mouseDoubleClickEvent(QMouseEvent *e) override
virtual void mouseMoveEvent(QMouseEvent *e) override
virtual void mousePressEvent(QMouseEvent *e) override
virtual void mouseReleaseEvent(QMouseEvent *e) override
virtual void paintEvent(QPaintEvent *event) override
virtual void showEvent(QShowEvent *) override
virtual void wheelEvent(QWheelEvent *e) override

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

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

Типичное использование:

QQuickWidget *view = new QQuickWidget;
view->setSource(QUrl::fromLocalFile("myqmlfile.qml"));
view->show();

Для получения ошибок, связанных с загрузкой и выполнением QML с помощью QQuickWidget, вы можете подключиться к сигналу statusChanged() и отслеживать QQuickWidget::Error. Ошибки доступны через QQuickWidget::errors().

QQuickWidget также управляет размерами представления и корневого объекта. По умолчанию resizeMode имеет значение SizeViewToRootObject, которое загрузит компонент и изменит его размер в соответствии с размером представления. В качестве альтернативы resizeMode может быть задан как SizeRootObjectToView, что приведет к изменению размера представления в соответствии с размером корневого объекта.

Примечание: QQuickWidget является альтернативой QQuickView и QWidget::createWindowContainer(). Ограничения порядка стека не применяются, что делает QQuickWidget более гибким вариантом, который ведет себя как обычный виджет.

Примечание: Однако, указанные выше преимущества достигаются за счет производительности. В отличие от QQuickWindow и QQuickView, QQuickWidget требует отрисовки в буферы фреймов OpenGL, что необходимо обеспечить, вызвав QQuickWindow::setGraphicsApi(QSGRendererInterface::OpenGLRhi) при запуске. Это неизбежно повлечёт за собой небольшую потерю производительности.

Примечание: Использование QQuickWidget отключает поток отрисовки в потоке на всех платформах. Это означает, что некоторые преимущества потоковой отрисовки, такие как классы Animator и анимации, управляемые vsync, не будут доступны.

Примечание: Избегайте вызова winId() для QQuickWidget. Эта функция запускает создание нативного окна, что приводит к снижению производительности и, возможно, артефактам отрисовки. Цель QQuickWidget состоит в том, чтобы отрисовывать сцены Quick без отдельного нативного окна, поэтому следует всегда избегать преобразования его в нативное виджет.

Граф сцены и персистентность контекста

QQuickWidget поддерживает QQuickWindow::isPersistentSceneGraph(), что означает, что приложения могут принять решение – вызвав QQuickWindow::setPersistentSceneGraph() для окна, возвращенного функцией quickWindow() – разрешить освобождение узлов графа сцены и других связанных с Qt Quick ресурсов сцены всякий раз, когда виджет скрывается. По умолчанию персистентность включена, как и в QQuickWindow.

При работе с OpenGL-бекендом графа сцены QQuickWindow предоставляет возможность отключить персистентные контексты OpenGL. Это значение в настоящее время игнорируется QQuickWidget, и контекст всегда персистентный. Таким образом, контекст OpenGL не уничтожается при скрытии виджета. Контекст уничтожается только при уничтожении виджета или при переродителе виджета в дочерний элемент иерархии другого виджета верхнего уровня. Однако некоторые приложения, в частности те, у которых есть свои графические ресурсы из-за выполнения пользовательской отрисовки OpenGL в сцене Qt Quick, могут захотеть отключить последнее, поскольку они могут не быть готовы к обработке потери контекста при перемещении QQuickWidget в другое окно. Такие приложения могут установить атрибут QCoreApplication::AA_ShareOpenGLContexts. Для обсуждения подробностей инициализации и очистки ресурсов см. документацию QOpenGLWidget.

Примечание: QQuickWidget предлагает меньше тонкого управления своим внутренним контекстом OpenGL, чем QOpenGLWidget, и есть тонкие различия, в частности, отключение персистентного графа сцены приведет к уничтожению контекста при изменении окна независимо от наличия QCoreApplication::AA_ShareOpenGLContexts.

Ограничения

Размещение других виджетов под QQuickWidget и его прозрачность не приведут к ожидаемым результатам: виджеты под ним не будут видны. Это связано с тем, что на практике QQuickWidget рисуется перед всеми другими обычными виджетами, не использующими OpenGL, и поэтому решения с прозрачностью невозможны. Другие типы макетов, например, размещение виджетов поверх QQuickWidget, будут работать как ожидается.

В случае крайней необходимости это ограничение можно преодолеть, установив атрибут Qt::WA_AlwaysStackOnTop для QQuickWidget. Имейте в виду, что это нарушает порядок стека. Например, невозможно разместить другие виджеты поверх QQuickWidget, поэтому его следует использовать только в ситуациях, когда требуется полупрозрачный QQuickWidget с видимыми под ним другими виджетами.

Это ограничение применимо только в случае наличия других виджетов под QQuickWidget в рамках одного окна. Делание окна полупрозрачным с другими приложениями и рабочим столом, видимыми на заднем плане, выполняется традиционным способом: установите Qt::WA_TranslucentBackground для окна верхнего уровня, запросите альфа-канал и измените цвет очистки графа сцены Qt Quick на Qt::transparent через setClearColor().

Поддержка при отсутствии OpenGL

Помимо OpenGL, бекенд Qt Quick также поддерживает QQuickWidget. Однако другие бекенды, например OpenVG, несовместимы, и попытка создания QQuickWidget приведёт к проблемам.

Обработка клавиши Tab

При нажатии клавиши [TAB] элемент внутри QQuickWidget получает фокус. Если этот элемент может обработать нажатие клавиши [TAB], фокус изменится в соответствии с этим элементом, в противном случае фокус получает следующий виджет в цепочке фокуса.

См. также Экспонирование атрибутов типов C++ для QML, Пример Qt Quick Widgets и QQuickView.

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

Перечисление QQuickWidget::ResizeMode

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

Постоянная Значение Описание
QQuickWidget::SizeViewToRootObject 0 Представление изменяет размер вместе с корневым элементом в QML.
QQuickWidget::SizeRootObjectToView 1 Представление автоматически изменяет размер корневого элемента до размера представления.

Перечисление QQuickWidget::Status

Указывает состояние загрузки QQuickWidget.

Постоянная Значение Описание
QQuickWidget::Null 0 У этого QQuickWidget нет установленного источника.
QQuickWidget::Ready 1 Этот QQuickWidget загрузил и создал компонент QML.
QQuickWidget::Loading 2 Этот QQuickWidget загружает данные из сети.
QQuickWidget::Error 3 Произошла одна или несколько ошибок. Вызовите errors(), чтобы получить список ошибок.

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

resizeMode : ResizeMode

Определяет, следует ли изменять размер содержимого окна.

Если это свойство установлено в SizeViewToRootObject (значение по умолчанию), размер окна изменяется в соответствии с размером корневого элемента в QML.

Если это свойство установлено в SizeRootObjectToView, размер корневого элемента автоматически изменяется до размера окна.

Независимо от этого свойства, sizeHint представления является начальным размером корневого элемента. Однако обратите внимание, что, поскольку QML может загружаться динамически, этот размер может измениться.

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

QQuickWidget::ResizeMode resizeMode() const
void setResizeMode(QQuickWidget::ResizeMode)

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

source : QUrl

Это свойство содержит URL-адрес источника компонента QML.

Убедитесь, что предоставленный URL-адрес полный и правильный, в частности, используйте QUrl::fromLocalFile(), когда загружаете файл из локальной файловой системы.

Примечание: Установка URL-адреса источника приведет к созданию компонента QML, даже если URL-адрес не изменился от текущего значения.

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

QUrl source() const
void setSource(const QUrl &url)

status : const Status

Текущее состояние компонента.

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

QQuickWidget::Status status() const

Сигнал оповещения:

void statusChanged(QQuickWidget::Status status)

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

QQuickWidget::QQuickWidget(const QUrl &source, QWidget *parent = nullptr)

Конструктор QQuickWidget с заданным QML-источником и родительским виджетом. Значение по умолчанию для родительского виджета – 0.

QQuickWidget::QQuickWidget(QQmlEngine *engine, QWidget *parent)

Конструктор QQuickWidget с заданным QML-движком и родительским виджетом.

Примечание: В этом случае QQuickWidget не владеет объектом движка; за уничтожение движка отвечает вызывающий код. Если движок будет удалён до представления, status() вернет QQuickWidget::Error.

См. также Status, status() и errors().

QQuickWidget::QQuickWidget(QWidget *parent = nullptr)

Создаёт QQuickWidget с заданным parent. Значение по умолчанию для parent равно 0.

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

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

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

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

См. также QQuickWindow::sceneGraphError().

[slot] void QQuickWidget::setSource(const QUrl &url)

Устанавливает источник в url, загружает QML-компонент и инициализирует его.

Убедитесь, что предоставленный URL-адрес полный и корректный, в частности, используйте QUrl::fromLocalFile(), когда загружаете файл из локальной файловой системы.

Вызов этого метода несколько раз с тем же URL-адресом приведёт к повторной инициализации QML-компонента.

Примечание: Функция-сеттер для свойства source.

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

[signal] void QQuickWidget::statusChanged(QQuickWidget::Status status)

Этот сигнал испускается при изменении текущего состояния компонента.

Примечание: Сигнал-уведомление для свойства status.

[override virtual] QQuickWidget::~QQuickWidget()

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

[override virtual protected] void QQuickWidget::dragEnterEvent(QDragEnterEvent *e)

Переопределяет: QWidget::dragEnterEvent(QDragEnterEvent *event).

[override virtual protected] void QQuickWidget::dragLeaveEvent(QDragLeaveEvent *e)

Переопределяет: QWidget::dragLeaveEvent(QDragLeaveEvent *event).

[override virtual protected] void QQuickWidget::dragMoveEvent(QDragMoveEvent *e)

Переопределяет: QWidget::dragMoveEvent(QDragMoveEvent *event).

[override virtual protected] void QQuickWidget::dropEvent(QDropEvent *e)

Переопределяет: QWidget::dropEvent(QDropEvent *event).

QQmlEngine *QQuickWidget::engine() const

Возвращает указатель на QQmlEngine, используемый для инициализации QML-компонентов.

QList<QQmlError> QQuickWidget::errors() const

Возвращает список ошибок, возникших во время последней компиляции или операции создания. Если состояние не равно Error, возвращается пустой список.

См. также status.

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

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

[override virtual protected] void QQuickWidget::focusInEvent(QFocusEvent *event)

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

[override virtual protected] bool QQuickWidget::focusNextPrevChild(bool next)

Переопределяет: QWidget::focusNextPrevChild(bool next).

[override virtual protected] void QQuickWidget::focusOutEvent(QFocusEvent *event)

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

QSurfaceFormat QQuickWidget::format() const

Возвращает фактический формат поверхности.

Если виджет ещё не отображён, возвращается запрошенный формат.

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

QImage QQuickWidget::grabFramebuffer() const

Отображает кадр и считывает его в изображение.

Примечание: Это потенциально дорогостоящая операция.

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

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

QSize QQuickWidget::initialSize() const

Возвращает начальный размер корневого объекта.

Если resizeMode равен SizeRootObjectToView, корневой объект будет изменён на размер области просмотра. Эта функция возвращает размер корневого объекта до его изменения.

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

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

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

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

[override virtual protected] void QQuickWidget::mouseDoubleClickEvent(QMouseEvent *e)

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

[override virtual protected] void QQuickWidget::mouseMoveEvent(QMouseEvent *e)

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

[override virtual protected] void QQuickWidget::mousePressEvent(QMouseEvent *e)

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

[override virtual protected] void QQuickWidget::mouseReleaseEvent(QMouseEvent *e)

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

[override virtual protected] void QQuickWidget::paintEvent(QPaintEvent *event)

Переопределяет: QWidget::paintEvent(QPaintEvent *event).

[since 5.5] QQuickWindow *QQuickWidget::quickWindow() const

Возвращает внеэкранное QQuickWindow, используемое этим виджетом для управления рендерингом Qt Quick. Это полезно, если вы хотите использовать API QQuickWindow, которые в данный момент не экспонируются QQuickWidget, например, подключаясь к сигналу QQuickWindow::beforeRendering() для рисования нативного содержимого OpenGL ниже рендеринга Qt Quick.

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

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

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

QQmlContext *QQuickWidget::rootContext() const

Эта функция возвращает корень иерархии контекстов. Каждый QML-компонент инициализируется в QQmlContext. QQmlContext необходимы для передачи данных в QML-компоненты. В QML контексты организованы иерархически, и эта иерархия управляется QQmlEngine.

QQuickItem *QQuickWidget::rootObject() const

Возвращает корневый элемент области просмотра. Может быть пустым, когда setSource() не был вызван, если он был вызван с повреждённым кодом QtQuick или во время создания содержимого QtQuick.

void QQuickWidget::setClearColor(const QColor &color)

Устанавливает цвет очистки. По умолчанию это непрозрачный цвет.

Чтобы получить полупрозрачный QQuickWidget, вызовите эту функцию со значением color, установленным в Qt::transparent, установите атрибут виджета Qt::WA_TranslucentBackground для верхнего окна и запросите альфа-канал через setFormat().

См. также QQuickWindow::setColor().

void QQuickWidget::setFormat(const QSurfaceFormat &format)

Устанавливает формат поверхности format для контекста и внеэкранной поверхности, используемых этим виджетом.

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

См. также QWindow::setFormat(), QWindow::format() и format().

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

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

QUrl QQuickWidget::source() const

Возвращает URL источника, если он задан.

Примечание: Функция-получатель для свойства source.

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

[override virtual protected] void QQuickWidget::wheelEvent(QWheelEvent *e)

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

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

Spec-Zone.ru

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