Qt와 다른 UI 툴킷의 병용
Qt는 애플리케이션 개발 요구 사항의 대부분을 충족하는 포괄적인 크로스 플랫폼 UI 컴포넌트 및 컨트롤 세트를 제공합니다. 하지만 경우에 따라 Qt를 다른 UI 툴킷과 통합해야 하거나, 그렇게 하는 것이 유리한 상황도 있습니다.
한 가지 시나리오는 다른 툴킷으로 구축된 애플리케이션에 Qt UI를 임베드하는 것으로, 예를 들어 기존 애플리케이션을 위한 플러그인을 구현하거나 기존 코드베이스에 Qt를 점진적으로 도입할 때입니다.
또 다른 시나리오는 Qt 애플리케이션에서 네이티브 또는 타사 UI 요소를 호스팅하는 것으로, 예를 들어 Qt에서 제공하지 않는 특수한 컨트롤에 접근해야 할 때입니다.
이제 이 두 가지 사용 사례를 해결하는 데 필요한 다양한 측면을 살펴보겠습니다.
외부 창
Qt를 다른 UI 툴킷과 통합하려면, 먼저 해당 플랫폼의 기본 UI 구성 요소에 대한 공통된 표현이 필요합니다. Qt에서는 이 표현이 불투명한 핸들인 ` WId ` 유형으로 나타내며, 각 플랫폼은 이것이 어떤 네이티브 유형에 매핑되는지에 대한 자체적인 정의를 가지고 있습니다.
다음 단계는 해당 네이티브 핸들을 Qt가 상호 작용할 수 있는 형태로 감싸는 것입니다. 우리는 네이티브 핸들의 ` QWindow ` 표현을 생성하여 Qt의 ` QWindow ` 추상화를 기반으로 합니다.
이러한 방식으로 생성된 창은 (Qt에 대해) 외부 UI 툴킷으로 생성된 컨트롤을 나타내므로, Qt에서는 ‘외부 창(foreign window )’으로 알려져 있습니다.
참고: Qt는 외부 창을 생성할 때 네이티브 창 핸들의 (독점적인) 소유권을 가져가지 않으므로, 애플리케이션은 외부 QWindow 의 수명 동안 네이티브 창을 유지하는 책임을 집니다.
이제 Qt UI를 이 외부 창에 삽입하거나, Qt UI에서 외부 창을 호스팅할 수 있습니다.
다른 UI 툴킷에 Qt 임베딩
다른 UI 툴킷에 Qt UI를 내장하려면 외부 창을 UI의 부모 창으로 사용합니다.
임베딩 Qt Widgets
Qt Widgets UI를 임베드하려면 위젯에 window handle 를 요청한 다음, 이를 외부 창으로 부모를 재설정합니다.
QMainWindow *mainWindow = new QMainWindow;
mainWindow->windowHandle()->setParent(foreignWindow);임베딩 Qt Quick
Qt Quick UI를 임베드하려면 quick 뷰의 부모를 직접 재설정할 수 있습니다.
QQuickView *quickView = new QQuickView;
quickView->setParent(foreignWindow);부모 핸들이 없는 경우
경우에 따라 네이티브 부모 핸들에 접근할 수 없는 경우가 있으며, 대신 제어 범위를 벗어나 재설정될 네이티브 핸들을 생성해야 할 수도 있습니다.
부모가 없는 QWindow 는 일반적으로 최상위 창이므로, 먼저 Qt::SubWindow 플래그를 추가하여 해당 창이 자식 창이 될 것임을 Qt에 명시적으로 알려야 합니다.
quickView->setFlags(quickView->flags() | Qt::SubWindow);WId그런 다음 QWidget 또는 QQuickView 에 대해
QWindow::winId()를 통해 xml-ph-0000@deepl.internal 또는 xml-ph-0001@deepl.internal의 xml-ph-0002@deepl.internal을 요청한 후, 이 네이티브 핸들을 반환하여 부모 창을 재설정합니다.
return reinterpret_cast<NSView*>(quickView->winId());이벤트 디스패칭
Qt는 이벤트와 타이머를 정기적으로 처리할 수 있어야 하므로, Qt UI를 다른 UI 툴킷에 통합할 때도 여전히 QGuiApplication 이 필요합니다. 일반적인 패턴은 Qt UI를 처음 구축할 때 애플리케이션 인스턴스를 생성하고, 예를 들어 플러그인이 언로드될 때와 같이 Qt UI가 해체된 것이 확인되면 이를 삭제하는 것입니다.
Qt에서 다른 UI 툴킷 호스팅
Qt에서 다른 UI 툴킷을 호스팅하려면, 외부 창을 Qt Widgets이나 Qt Quick 전용 창 컨테이너로 감싸야 합니다.
호스팅 Qt Widgets
Qt Widgets UI 스택 기반으로 구축된 애플리케이션의 경우, ` QWidget::createWindowContainer()`를 통해 ` QWindow`의 ` QWidget ` 표현을 생성하며, 이 표현은 레이아웃 등에서 다른 위젯과 마찬가지로 관리할 수 있습니다.
QWidget *hostedWidget = QWidget::createWindowContainer(foreignWindow);
layout->addWidget(hostedWidget);호스팅 Qt Quick
Qt Quick UI 스택을 기반으로 구축된 애플리케이션의 경우, 외부 창을 QQmlApplicationEngine에 노출시킨 다음 WindowContainer 항목을 사용하여 해당 외부 창을 관리합니다.
engine.setInitialProperties({{ "foreignWindow", QVariant::fromValue(foreignWindow) }});ApplicationWindow {
required property QtObject foreignWindow;
WindowContainer {
window: foreignWindow
anchors.centerIn: parent
}
}이 사용 사례에 대한 자세한 내용은 Window Hosting Example을 참조하십시오.
플랫폼별 솔루션
위에서 설명한 창 임베딩 및 호스팅을 위한 기본 요소만으로도 대부분의 경우를 다룰 수 있지만, Qt는 더 심층적인 통합이 필요한 경우를 위해 플랫폼별 솔루션도 제공합니다.
Active Qt 모듈
Qt의 ActiveX 및 COM 지원 덕분에 Windows용 Qt 개발자는 Qt 애플리케이션에서 모든 ActiveX 서버가 제공하는 ActiveX 컨트롤과 COM 객체에 액세스하여 사용할 수 있으며, 임의의 수의 Qt 객체와 위젯을 COM 객체 및 ActiveX 컨트롤로 사용하여 Qt 애플리케이션을 COM 서버로 제공할 수도 있습니다.
자세한 내용은 Active Qt 참조하십시오.
© 2026 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.