Класс 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