QQmlEngineExtensionPlugin Class
QQmlEngineExtensionPlugin 클래스는 사용자 정의 QML 확장 플러그인을 위한 추상 기본 클래스를 제공합니다. 더 보기...
| 헤더: | #include <QQmlEngineExtensionPlugin> |
| CMake: | find_package(Qt6 REQUIRED COMPONENTS Qml) target_link_libraries(mytarget PRIVATE Qt6::Qml) |
| qmake: | QT += qml |
| 상속: | QObject |
- 상속된 멤버를 포함한 모든 멤버 목록
- QQmlEngineExtensionPlugin은 플러그인 클래스의 일부입니다.
공개 함수
| QQmlEngineExtensionPlugin(QObject *parent = nullptr) |
재구현된 공용 함수
| virtual void | initializeEngine(QQmlEngine *engine, const char *uri) override |
매크로
(since 6.2) | Q_IMPORT_QML_PLUGIN(PluginName) |
상세 설명
QQmlEngineExtensionPlugin 는 QML 애플리케이션에 동적으로 로드될 수 있는 QML 확장 기능을 생성할 수 있게 해주는 플러그인 인터페이스입니다. 이러한 확장 기능을 통해 사용자 정의 QML 유형을 QML 엔진에서 사용할 수 있게 됩니다.
QML 확장 플러그인을 작성하려면:
- QQmlEngineExtensionPlugin 을 상속하고, Q_PLUGIN_METADATA() 매크로를 사용하여 Qt 메타 객체 시스템에 플러그인을 등록합니다.
- QML_ELEMENT 및 QML_NAMED_ELEMENT() 매크로를 사용하여 QML 타입을 선언합니다.
- 빌드 파일을 구성하십시오.
CMake:
qt_add_qml_module(<target> URI <my.import.name> VERSION 1.0 QML_FILES <app.qml> NO_RESOURCE_TARGET_PATH )qmake:
CONFIG += qmltypes QML_IMPORT_NAME = <my.import.name> QML_IMPORT_MAJOR_VERSION = <version> - qmake를 사용하는 경우, 플러그인을 설명하는 qmldir 파일을 생성하십시오. CMake는 기본적으로 qmldir 파일을 자동으로 생성한다는 점에 유의하십시오.
QML 확장 플러그인은 애플리케이션 전용 플러그인이나 라이브러리형 플러그인 중 하나에 해당합니다. 라이브러리형 플러그인은 타입 등록에만 국한되어야 합니다. 엔진의 루트 컨텍스트를 임의로 조작할 경우, 라이브러리 사용자의 코드에서 충돌이나 기타 문제가 발생할 수 있기 때문입니다.
참고: CMake의 qt_add_qml_module API를 사용할경우 , 플러그인이 자동으로 생성됩니다. 이 플러그인이 타입 등록을 처리해 줍니다. 사용자 정의 이미지 제공자를 등록하는 등 특별한 요구 사항이 있는 경우에만 사용자 정의 플러그인을 작성하면 됩니다. 이 경우, qt_add_qml_module 호출 시 NO_GENERATE_PLUGIN_SOURCE를 전달하여 기본 플러그인 생성을 비활성화하십시오.
링크러가 최적화 과정에서 생성된 타입 등록 함수를 실수로 제거할 수 있습니다. 코드 내 어딘가에 해당 함수를 가리키는 합성(synthetic) 휘발성(volatile) 포인터를 선언하면 이를 방지할 수 있습니다. 이 함수는 qmltyperegistrar에 의해 생성되며, 이름은 qml_register_types_ 에 모듈 URI를 연결하고, 점(.)을 밑줄(_)로 대체한 형태입니다.
모듈 이름이 "my.module"인 경우, 전역 범위에서 다음과 같이 선선언을 추가해야 합니다.
void qml_register_types_my_module();그런 다음, 등록 함수와 동일한 바이너리에 포함되는 함수의 구현부에 다음 코드 스니펫을 추가합니다:
volatile auto registration = &qml_register_types_my_module;
Q_UNUSED(registration);'C++를 사용한 QML 확장 기능 작성' 튜토리얼에는 QML 플러그인 생성에 관한 장도 포함되어 있습니다.
'Qt 플러그인 만드는 방법'도 참조하십시오 .
멤버 함수 문서
[explicit] QQmlEngineExtensionPlugin::QQmlEngineExtensionPlugin(QObject *parent = nullptr)
지정된 ` parent`를 사용하여 QML 확장 플러그인을 생성합니다.
이 생성자는 Q_PLUGIN_METADATA() 매크로에 의해 자동으로 호출되므로, 명시적으로 호출할 필요가 없습니다.
[override virtual] void QQmlEngineExtensionPlugin::initializeEngine(QQmlEngine *engine, const char *uri)
engine 를 사용하여 uri 에서 확장 기능을 초기화합니다. 예를 들어, 애플리케이션 플러그인은 엔진의 루트 컨텍스트에 컨텍스트 속성으로 일부 데이터나 객체를 QML에 노출할 수 있습니다.
매크로 문서
[since 6.2] Q_IMPORT_QML_PLUGIN(PluginName)
메타데이터를 선언하는 플러그인 확장 클래스 이름이 ` PluginName `인 플러그인이 정적 빌드에 포함되도록 보장합니다. `qt_add_qml_module`을 사용하여 생성된 모듈의 경우, ` CLASS_NAME ` 인수가 지정되지 않은 한, QML 모듈 URI에서 점을 밑줄로 대체하여 기본 플러그인 확장 클래스 이름을 계산합니다.
예를 들어:
qt_add_qml_module(myplugin
# The plugin extension class name in this case is my_Company_QmlComponents.
URI my.Company.QmlComponents
...
)이 매크로는 Qt 6.2에서 도입되었습니다.
Q_IMPORT_PLUGIN도 참조하십시오 .
© 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.