Spec-Zone.ru › Qt 6.0

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

Примечание: Использование 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 прозрачности не приведет к ожидаемым результатам: виджеты под ним не будут видны. Это происходит потому, что 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 с заданным родительским виджетом. По умолчанию значение родительского виджета равно 0.

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

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

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

Этот сигнал будет испускаться из потока 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 компонента.

Примечание: Сигнал-уведомление для свойства 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)

Устанавливает цвет очистки 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.0/qquickwidget.html

Spec-Zone.ru

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