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 `를 전달하여 기본 플러그인 생성을 비활성화하십시오.
링크러가 최적화 과정에서 생성된 타입 등록 함수를 실수로 제거할 수 있습니다. 코드 내 어딘가에 해당 함수를 가리키는 합성(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 플러그인 생성에 관한 장이 포함되어 있습니다.
- C++에서 QML 유형 정의 - 런타임에 C++ 유형을 등록하는 방법에 대한 정보.
- Qt 플러그인 생성 방법 - 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.