Класс QQuickWidget
Класс QQuickWidget предоставляет виджет для отображения пользовательского интерфейса Qt Quick. Подробнее...
| Заголовок: | #include <QQuickWidget> |
| qmake: | QT += quickwidgets |
| С момента: | Qt 5.3 |
| Наследует: | QWidget |
Этот класс был представлен в Qt 5.3.
Открытые типы
| перечисление | 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. Это естественным образом приведёт к небольшому снижению производительности.
Примечание: Использование QQuickWidget отключает потоковый цикл отрисовки на всех платформах. Это означает, что некоторые преимущества потоковой отрисовки, например, классы Animator и анимации, управляемые синхронизацией с кадром, будут недоступны.
Примечание: Избегайте вызова 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. Однако другие бэкенды, например, Direct 3D 12, несовместимы, и попытка создания 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
Текущее состояние компонента Status.
Функции доступа:
| QQuickWidget::Status | status() const |
Сигнал уведомления:
| void | statusChanged(QQuickWidget::Status status) |
Документация по функциям-членам
QQuickWidget::QQuickWidget(const QUrl &source, QWidget *parent = nullptr)
Создаёт QQuickWidget с заданным QML source и parent. Значение по умолчанию для parent — 0.
QQuickWidget::QQuickWidget(QQmlEngine *engine, QWidget *parent)
Создаёт QQuickWidget с заданным QML движком и родительским элементом.
Примечание: в этом случае QQuickWidget не владеет объектом движка; ответственность за удаление движка лежит на вызывающей стороне. Если движок удалён до виджета, status() вернёт QQuickWidget::Error.
См. также Status, status() и errors().
QQuickWidget::QQuickWidget(QWidget *parent = nullptr)
Создаёт QQuickWidget с заданным родительским элементом. Значение по умолчанию для parent — 0.
[signal] void QQuickWidget::sceneGraphError(QQuickWindow::SceneGraphError error, const QString &message)
Этот сигнал излучается, когда во время инициализации графа сцены произошла ошибка.
Приложения должны подключиться к этому сигналу, если они хотят обрабатывать ошибки, такие как сбои при создании контекста OpenGL, собственным способом. Если к сигналу не подключён обработчик, поведение будет другим: Quick выведет сообщение или покажет диалоговое окно и завершит приложение.
Этот сигнал излучается из потока GUI.
См. также 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).
QQuickWindow *QQuickWidget::quickWindow() const
Возвращает внеэкранный QQuickWindow, используемый этим виджетом для управления рендерингом Qt Quick. Это полезно, если вам нужны API QQuickWindow, которые в данный момент не доступны в QQuickWidget, например, подключение к сигналу QQuickWindow::beforeRendering() для рисования нативного OpenGL-контента под собственным рендерингом Qt Quick.
Предупреждение: Используйте возвращаемое значение этой функции с осторожностью. В частности, никогда не пытайтесь показать QQuickWindow и будьте очень осторожны при использовании других API, предназначенных только для QWindow.
Эта функция была введена в Qt 5.5.
QQmlContext *QQuickWidget::rootContext() const
Эта функция возвращает корень иерархии контекстов. Каждый QML компонент инициализируется в QQmlContext. QQmlContextы необходимы для передачи данных QML компонентам. В QML контексты организованы иерархически, и эта иерархия управляется QQmlEngine.
QQuickItem *QQuickWidget::rootObject() const
Возвращает корневый элемент виджета. Может быть null, если setSource() не был вызван, если он был вызван с повреждённым кодом QtQuick или во время создания содержимого QtQuick.
void QQuickWidget::setClearColor(const QColor &color)
Устанавливает цвет очистки (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-5.13/qquickwidget.html