QQuickWidget Class
QQuickWidget 클래스는 Qt Quick 사용자 인터페이스를 표시하기 위한 위젯을 제공합니다. 더 보기...
헤더: | #include <QQuickWidget> |
CMake: | find_package(Qt6 REQUIRED COMPONENTS QuickWidgets) target_link_libraries(mytarget PRIVATE Qt6::QuickWidgets) |
qmake: | QT += quickwidgets |
상속합니다: | QWidget |
공용 유형
enum | ResizeMode { SizeViewToRootObject, SizeRootObjectToView } |
enum | Status { Null, Ready, Loading, Error } |
속성
- resizeMode : ResizeMode
- source : QUrl
- status : const Status
공용 기능
QQuickWidget(QWidget *parent = nullptr) | |
QQuickWidget(QQmlEngine *engine, QWidget *parent) | |
QQuickWidget(const QUrl &source, 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 |
상세 설명
이것은 메인 소스 파일의 URL이 주어지면 QML 장면을 자동으로 로드하고 표시하는 QQuickWindow 의 편의 래퍼입니다. 또는 QQmlComponent 을 사용하여 자체 객체를 인스턴스화하여 수동으로 설정한 QQuickWidget에 배치할 수 있습니다.
일반적인 사용법:
QQuickWidget *view = new QQuickWidget; view->setSource(QUrl::fromLocalFile("myqmlfile.qml")); view->show();
QQuickWidget으로 QML 로드 및 실행과 관련된 오류를 받으려면 statusChanged() 신호에 연결하여 QQuickWidget::Error 을 모니터링할 수 있습니다. 오류는 QQuickWidget::errors()를 통해 확인할 수 있습니다.
QQuickWidget은 뷰 및 루트 개체의 크기 조정도 관리합니다. 기본적으로 resizeMode 은 SizeViewToRootObject 이며, 구성 요소를 로드하고 뷰의 크기에 맞게 크기를 조정합니다. 또는 resizeMode 을 SizeRootObjectToView 으로 설정하여 뷰의 크기를 루트 개체의 크기로 조정할 수 있습니다.
성능 고려 사항
QQuickWidget은 QQuickView 및 QWidget::createWindowContainer()를 사용하는 대신 사용할 수 있습니다. 스택 순서에 대한 제한이 적용되지 않으므로 일반 위젯처럼 작동하는 QQuickWidget이 더 유연한 대안이 됩니다.
그러나 위에서 언급한 장점은 성능 저하라는 대가를 치릅니다:
- QQuickWindow 및 QQuickView 과 달리 QQuickWidget은 화면 밖 컬러 버퍼(일반적으로 2D 텍스처)를 대상으로 하는 렌더링 패스를 하나 이상 추가로 수행한 후 텍스처 쿼드를 그려야 합니다. 이는 특히 GPU의 조각 처리에 대한 부하 증가를 의미합니다.
- QQuickWidget을 사용하면 모든 플랫폼에서 스레드 렌더링 루프가 비활성화됩니다. 즉, 스레드 렌더링의 일부 이점(예: Animator 클래스 및 동기화 동기화 기반 애니메이션)을 사용할 수 없게 됩니다.
참고: QQuickWidget에서 winId()를 호출하지 마세요. 이 함수는 네이티브 창 생성을 트리거하므로 성능이 저하되고 렌더링 결함이 발생할 수 있습니다. QQuickWidget의 전체 목적은 별도의 기본 창 없이 빠른 장면을 렌더링하는 것이므로 기본 위젯으로 만드는 것은 항상 피해야 합니다.
그래픽 API 지원
QQuickWidget은 software
백엔드뿐만 아니라 Qt Quick 에서 지원하는 모든 3D 그래픽 API에서 작동합니다. 그러나 OpenVG와 같은 다른 백엔드는 호환되지 않으므로 QQuickWidget을 만들려고 하면 문제가 발생할 수 있습니다.
플랫폼의 기본 그래픽 API를 재정의하는 방법은 QQuickWindow 및 QQuickView 에서와 마찬가지로 첫 번째 QQuickWidget을 구성하기 전에 QQuickWindow::setGraphicsApi()를 호출하거나 QSG_RHI_BACKEND
환경 변수를 설정하는 것입니다.
참고: 하나의 최상위 창은 렌더링에 하나의 단일 그래픽 API만 사용할 수 있습니다. 예를 들어, 동일한 최상위 창의 위젯 계층 구조에 Vulkan을 사용하는 QQuickWidget과 QOpenGLWidget 을 배치하려고 하면 문제가 발생하고 위젯 중 하나가 예상대로 렌더링되지 않습니다.
씬 그래프 및 컨텍스트 지속성
QQuickWindow::isPersistentSceneGraph즉, 애플리케이션은 quickWindow() 함수에서 반환된 창에서 QQuickWindow::setPersistentSceneGraph()을 호출하여 위젯이 숨겨질 때마다 시나리오 그래프 노드 및 기타 Qt Quick 장면 관련 리소스를 해제하도록 결정할 수 있습니다. 기본적으로 지속성은 QQuickWindow 와 마찬가지로 활성화됩니다.
OpenGL로 실행할 때 QQuickWindow 에서도 영구 OpenGL 컨텍스트를 비활성화할 수 있습니다. 이 설정은 현재 QQuickWidget에서 무시되며 컨텍스트는 항상 영구적입니다. 따라서 위젯을 숨길 때 OpenGL 컨텍스트는 파괴되지 않습니다. 컨텍스트는 위젯이 파괴되거나 위젯이 다른 최상위 위젯의 하위 계층 구조로 다시 부모가 변경될 때만 파괴됩니다. 그러나 일부 애플리케이션, 특히 Qt Quick 장면에서 사용자 지정 OpenGL 렌더링을 수행하여 자체 그래픽 리소스가 있는 애플리케이션의 경우 QQuickWidget을 다른 창으로 이동할 때 컨텍스트 손실을 처리할 준비가 되어 있지 않을 수 있으므로 후자를 비활성화할 수 있습니다. 이러한 애플리케이션은 QCoreApplication::AA_ShareOpenGLContexts 속성을 설정할 수 있습니다. 리소스 초기화 및 정리에 대한 자세한 내용은 QOpenGLWidget 문서를 참조하세요.
참고: QQuickWidget은 내부 OpenGL 컨텍스트를 QOpenGLWidget 보다 덜 세밀하게 제어할 수 있으며, 특히 퍼시스턴트 씬 그래프를 비활성화하면 QCoreApplication::AA_ShareOpenGLContexts의 존재 여부와 관계없이 창 변경 시 컨텍스트가 파괴된다는 점 등 미묘한 차이가 있습니다.
제한 사항
다른 위젯을 아래에 배치하고 QQuickWidget을 투명하게 만들면 예상한 결과를 얻지 못합니다: 아래에 있는 위젯이 보이지 않습니다. 실제로는 QQuickWidget이 다른 모든 일반 OpenGL 위젯보다 먼저 그려지기 때문에 시스루 타입의 솔루션은 불가능하기 때문입니다. QQuickWidget 위에 위젯을 배치하는 것과 같은 다른 유형의 레이아웃은 예상대로 작동합니다.
꼭 필요한 경우 QQuickWidget에 Qt::WA_AlwaysStackOnTop 속성을 설정하여 이 제한을 극복할 수 있습니다. 하지만 이렇게 하면 스택 순서가 깨진다는 점에 유의하세요. 예를 들어 다른 위젯을 QQuickWidget 위에 놓을 수 없으므로 다른 위젯이 아래에 보이는 반투명 QQuickWidget이 필요한 상황에서만 사용해야 합니다.
이 제한은 같은 창 안에 QQuickWidget 아래에 다른 위젯이 있는 경우에만 적용됩니다. 다른 애플리케이션과 바탕화면이 배경에 보이도록 창을 반투명하게 만드는 것은 기존 방식대로 하면 됩니다: 최상위 창에 Qt::WA_TranslucentBackground 을 설정하고 알파 채널을 요청한 다음 setClearColor()을 통해 Qt Quick 장면 그래프의 투명 색상을 Qt::transparent 으로 변경합니다.
탭 키 처리
[TAB]
키를 누르면 큐퀵위젯 내부의 항목에 초점이 맞춰집니다. 이 항목이 [TAB]
키 누름을 처리할 수 있으면 항목 내에서 포커스가 그에 따라 변경되고, 그렇지 않으면 포커스 체인에 있는 다음 위젯이 포커스를 받습니다.
C++ 타입의 어트리뷰트를 QML에 노출하기, Qt Quick 위젯 예제 및 QQuickView 을참조하세요 .
멤버 타입 문서
enum QQuickWidget::ResizeMode
이 열거형은 뷰의 크기를 조정하는 방법을 지정합니다.
Constant | 값 | 설명 |
---|---|---|
QQuickWidget::SizeViewToRootObject | 0 | 뷰의 크기가 QML의 루트 항목에 따라 조정됩니다. |
QQuickWidget::SizeRootObjectToView | 1 | 뷰는 자동으로 뷰의 크기에 맞게 루트 항목의 크기를 조정합니다. |
enum QQuickWidget::Status
QQuickWidget 의 로딩 상태를 지정합니다.
Constant | 값 | 설명 |
---|---|---|
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
이 속성에는 QML 컴포넌트의 소스 URL이 저장됩니다.
특히 로컬 파일 시스템에서 파일을 로드할 때는 QUrl::fromLocalFile()를 사용하는 등 제공된 URL이 완전하고 올바른지 확인하세요.
참고: 소스 URL을 설정하면 URL이 현재 값에서 변경되지 않더라도 QML 컴포넌트가 인스턴스화됩니다.
함수 액세스:
[read-only]
status : const Status
컴포넌트의 현재 status.
기능에 액세스합니다:
QQuickWidget::Status | status() const |
알림 신호:
void | statusChanged(QQuickWidget::Status status) |
멤버 함수 문서
[explicit]
QQuickWidget::QQuickWidget(QWidget *parent = nullptr)
기본 QML 엔진을 parent 의 자식으로 QQuickWidget을 구성합니다.
parent 의 기본값은 nullptr
입니다.
QQuickWidget::QQuickWidget(QQmlEngine *engine, QWidget *parent)
주어진 QML engine 을 parent 의 자식으로 사용하여 QQuickWidget을 생성합니다.
참고: 지정된 engine 객체의 소유권은 QQuickWidget에 있지 않으며, 엔진을 소멸하는 것은 호출자의 책임입니다. 보기 전에 engine 이 삭제되면 status() 은 QQuickWidget::Error 을 반환합니다.
[explicit]
QQuickWidget::QQuickWidget(const QUrl &source, QWidget *parent = nullptr)
기본 QML 엔진과 주어진 QML source 을 parent 의 자식으로 사용하여 QQuickWidget을 구축합니다.
parent 의 기본값은 nullptr
입니다.
[override virtual noexcept]
QQuickWidget::~QQuickWidget()
QQuickWidget 를 파괴합니다.
[override virtual protected]
void QQuickWidget::dragEnterEvent(QDragEnterEvent *e)
다시 구현합니다: QWidget::dragEnterEvent(QDragEnterEvent * 이벤트).
[override virtual protected]
void QQuickWidget::dragLeaveEvent(QDragLeaveEvent *e)
다시 구현합니다: QWidget::dragLeaveEvent(QDragLeaveEvent * 이벤트).
[override virtual protected]
void QQuickWidget::dragMoveEvent(QDragMoveEvent *e)
다시 구현합니다: QWidget::dragMoveEvent(QDragMoveEvent * 이벤트).
[override virtual protected]
void QQuickWidget::dropEvent(QDropEvent *e)
다시 구현합니다: QWidget::dropEvent(QDropEvent * 이벤트).
QQmlEngine *QQuickWidget::engine() const
QML 컴포넌트를 인스턴스화하는 데 사용되는 QQmlEngine 에 대한 포인터를 반환합니다.
QList<QQmlError> QQuickWidget::errors() const
마지막 컴파일 또는 생성 작업 중에 발생한 오류 목록을 반환합니다. 상태가 Error 이 아닌 경우 빈 목록이 반환됩니다.
status 를참조하세요 .
[override virtual protected]
bool QQuickWidget::event(QEvent *e)
다시 구현합니다: QWidget::event(QEvent * 이벤트).
[override virtual protected]
void QQuickWidget::focusInEvent(QFocusEvent *event)
다시 구현합니다: QWidget::focusInEvent(QFocusEvent * 이벤트).
[override virtual protected]
bool QQuickWidget::focusNextPrevChild(bool next)
다시 구현합니다: QWidget::focusNextPrevChild(다음 부울).
[override virtual protected]
void QQuickWidget::focusOutEvent(QFocusEvent *event)
다시 구현합니다: QWidget::focusOutEvent(QFocusEvent * 이벤트).
QSurfaceFormat QQuickWidget::format() const
실제 서피스 형식을 반환합니다.
위젯이 아직 표시되지 않은 경우 요청된 형식이 반환됩니다.
setFormat()도 참조하세요 .
QImage QQuickWidget::grabFramebuffer() const
프레임을 렌더링하고 이미지로 다시 읽습니다.
참고: 이 작업은 잠재적으로 비용이 많이 드는 작업입니다.
[override virtual protected]
void QQuickWidget::hideEvent(QHideEvent *)
다시 구현합니다: QWidget::hideEvent(QHideEvent * 이벤트).
QSize QQuickWidget::initialSize() const
루트 개체의 초기 크기를 반환합니다.
resizeMode 이 SizeRootObjectToView 인 경우 루트 개체의 크기가 뷰 크기에 맞게 조정됩니다. 이 함수는 크기가 조정되기 전의 루트 개체의 크기를 반환합니다.
[override virtual protected]
void QQuickWidget::keyPressEvent(QKeyEvent *e)
다시 구현합니다: QWidget::keyPressEvent(QKeyEvent * 이벤트).
[override virtual protected]
void QQuickWidget::keyReleaseEvent(QKeyEvent *e)
다시 구현합니다: QWidget::keyReleaseEvent(QKeyEvent * 이벤트).
[override virtual protected]
void QQuickWidget::mouseDoubleClickEvent(QMouseEvent *e)
다시 구현합니다: QWidget::mouseDoubleClickEvent(QMouseEvent * 이벤트).
[override virtual protected]
void QQuickWidget::mouseMoveEvent(QMouseEvent *e)
다시 구현합니다: QWidget::mouseMoveEvent(QMouseEvent * 이벤트).
[override virtual protected]
void QQuickWidget::mousePressEvent(QMouseEvent *e)
다시 구현합니다: QWidget::mousePressEvent(QMouseEvent * 이벤트).
[override virtual protected]
void QQuickWidget::mouseReleaseEvent(QMouseEvent *e)
다시 구현합니다: QWidget::mouseReleaseEvent(QMouseEvent * 이벤트).
[override virtual protected]
void QQuickWidget::paintEvent(QPaintEvent *event)
다시 구현합니다: QWidget::paintEvent(QPaintEvent * 이벤트).
QQuickWindow *QQuickWidget::quickWindow() const
이 위젯이 Qt Quick 렌더링을 구동하는 데 사용하는 오프스크린 QQuickWindow 을 반환합니다. 예를 들어 QQuickWindow::beforeRendering() 신호에 연결하여 Qt Quick 자체 렌더링 아래에 네이티브 OpenGL 콘텐츠를 그리는 등 현재 QQuickWidget 에서 노출되지 않는 QQuickWindow API를 사용하려는 경우에 유용합니다.
경고: 이 함수의 반환값은 주의해서 사용하세요. 특히 QQuickWindow 을 표시하려고 시도하지 말고 다른 QWindow 전용 API를 사용할 때는 매우 주의하세요.
경고: 오프스크린 창은 QQuickWidget, 특히 위젯이 다른 QQuickWindow 으로 이동하는 동안 삭제(및 재생성)될 수 있습니다. 창이 언제 교체되었는지 확인하려면 destroyed() 신호에 연결하세요.
QQmlContext *QQuickWidget::rootContext() const
이 함수는 컨텍스트 계층 구조의 루트를 반환합니다. 각 QML 컴포넌트는 QQmlContext 에서 인스턴스화됩니다. QQmlContext 은 QML 컴포넌트에 데이터를 전달하는 데 필수적입니다. QML에서 컨텍스트는 계층적으로 배열되며 이 계층 구조는 QQmlEngine 에서 관리합니다.
QQuickItem *QQuickWidget::rootObject() const
뷰의 루트 item 를 반환합니다. setSource ()가 호출되지 않은 경우, 깨진 QtQuick 코드와 함께 호출된 경우 또는 QtQuick 콘텐츠가 생성되는 동안에는 null이 될 수 있습니다.
[signal]
void QQuickWidget::sceneGraphError(QQuickWindow::SceneGraphError error, const QString &message)
이 신호는 씬 그래프 초기화 중 error 이 발생했을 때 발생합니다.
애플리케이션이 사용자 지정 방식으로 OpenGL 컨텍스트 생성 실패와 같은 오류를 처리하려는 경우 이 신호에 연결해야 합니다. 신호에 연결된 슬롯이 없는 경우 동작이 달라집니다: 빠른 실행은 message 을 인쇄하거나 메시지 상자를 표시하고 애플리케이션을 종료합니다.
이 신호는 GUI 스레드에서 방출됩니다.
QQuickWindow::sceneGraphError()도 참조하세요 .
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()도 참조하세요 .
[slot]
void QQuickWidget::setSource(const QUrl &url)
소스를 url 로 설정하고 QML 컴포넌트를 로드하고 인스턴스화합니다.
특히 로컬 파일 시스템에서 파일을 로드할 때는 QUrl::fromLocalFile()를 사용하는 등 제공된 URL이 완전하고 올바른지 확인하세요.
동일한 URL로 이 메서드를 여러 번 호출하면 QML 컴포넌트가 다시 인스턴스화됩니다.
참고: 속성에 대한 설정자 함수 source.
source()도 참조하세요 .
[override virtual protected]
void QQuickWidget::showEvent(QShowEvent *)
다시 구현합니다: QWidget::showEvent(QShowEvent * 이벤트).
QUrl QQuickWidget::source() const
설정된 경우 소스 URL을 반환합니다.
참고: 속성 소스에 대한 게터 함수입니다.
setSource()도 참조하세요 .
[signal]
void QQuickWidget::statusChanged(QQuickWidget::Status status)
이 신호는 컴포넌트의 현재 status 가 변경될 때 발생합니다.
참고: 프로퍼티 status 에 대한 알림 신호입니다.
[override virtual protected]
void QQuickWidget::wheelEvent(QWheelEvent *e)
다시 구현합니다: QWidget::wheelEvent(QWheelEvent * 이벤트).
© 2025 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.