QML용 C++ 플러그인 만들기
플러그인 만들기
QML engine 은 QML용 C++ 플러그인을 로드합니다. 이러한 플러그인은 일반적으로 QML 확장 모듈로 제공되며, 모듈을 가져오는 QML 문서에서 클라이언트가 사용할 유형을 제공할 수 있습니다. 모듈이 유효한 것으로 간주되려면 등록된 유형이 하나 이상 있어야 합니다.
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를 전달하세요.
링커가 최적화를 위해 생성된 유형 등록 기능을 실수로 제거할 수 있습니다. 코드 어딘가에 함수에 대한 합성 휘발성 포인터를 선언하여 이를 방지할 수 있습니다. 모듈 이름이 "my.module"인 경우 전역 범위에서 정방향 선언을 추가합니다:
void qml_register_types_my_module();
그런 다음 등록과 동일한 바이너리의 일부인 함수 구현에 다음 코드 조각을 추가합니다:
volatile auto registration = &qml_register_types_my_module; Q_UNUSED(registration);
참조
- C++로 QML 확장 프로그램 작성하기 - QML 플러그인 만들기에 대한 장이 포함되어 있습니다.
- C++에서 QML 유형 정의하기 - 런타임에 C++ 유형을 등록하는 방법에 대한 정보입니다.
- Qt 플러그인 생성 방법 - Qt 플러그인에 대한 정보입니다.
© 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.