재사용 가능한 QML 모듈 빌드하기
아래 예제는 C++를 QML에 노출하는 라이브러리를 만드는 방법을 보여줍니다. 이 예제의 디렉토리 구조는 다음과 같습니다:
├── CMakeLists.txt └── example └── mylib ├── CMakeLists.txt ├── mytype.cpp ├── mytype.h
최상위 레벨 CMakeLists.txt
파일은 qt_standard_project_setup을 사용하여 몇 가지 기본 설정을 수행한 다음 add_subdirectory
을 사용하여 mylib에 포함시킵니다:
cmake_minimum_required(VERSION 3.16) project(qmlmodule VERSION 1.0.0 LANGUAGES CXX) set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_STANDARD_REQUIRED ON) find_package(Qt6 REQUIRED COMPONENTS Qml) qt_standard_project_setup(REQUIRES 6.5) add_subdirectory(example/mylib)
하위 디렉터리는 QML 모듈의 URI에 대응하도록 구조화되어 있지만 점은 슬래시로 대체되어 있습니다. 이는 엔진이 가져오기 경로에서 모듈을 검색할 때 사용하는 로직과 동일합니다. 이 하위 디렉터리 구조를 따르면 툴링에 도움이 됩니다.
mytype.h
클래스를 선언하고 선언적 등록 매크로를 사용하여 엔진에 노출합니다.
하위 디렉터리 CMakeLists.txt
에서는 qt_add_qml_module을 호출합니다. QML 애플리케이션 빌드와 비교하면 호출 방식이 약간 다릅니다:
qt_add_qml_module(mylib URI example.mylib VERSION 1.0 SOURCES mytype.h mytype.cpp QML_FILES MyQmlType.qml )
mylib
에 대한 타깃이 이전에 생성되지 않았습니다. qt6_add_qml_module
에 전달된 타깃이 존재하지 않으면 자동으로 라이브러리 타깃을 생성합니다. 이렇게 하면 qt_add_library를 별도로 호출하지 않아도 됩니다. C++로 정의된 QML 유형을 등록하려면 해당 헤더와 소스 파일을 SOURCES 파라미터에 인수로 추가합니다.
프로젝트가 빌드되면 라이브러리 외에 QML 플러그인도 빌드됩니다. 플러그인의 자동 생성 클래스는 QQmlEngineExtensionPlugin 에서 확장됩니다. mylib 라이브러리 자체에는 이미 엔진에 유형을 등록하는 코드가 포함되어 있습니다. 그러나 이는 라이브러리에 대해 링크할 수 있는 경우에만 유용합니다. qml
, QML Runtime 도구에서 로드한 QML 파일에서 모듈을 사용할 수 있게 하려면 로드할 수 있는 플러그인이 필요합니다. 그런 다음 플러그인은 실제로 라이브러리에 대해 링크하고 유형이 등록되도록 하는 역할을 합니다.
플러그인 자동 생성은 모듈이 유형을 등록하는 것 외에 다른 작업을 하지 않는 경우에만 가능하다는 점에 유의하세요. initializeEngine
에 이미지 공급자를 등록하는 것과 같은 고급 작업을 수행해야 하는 경우 여전히 플러그인을 수동으로 작성해야 합니다. qt6_add_qml_module은 NO_GENERATE_PLUGIN_SOURCE
을 통해 이를 지원합니다.
또한 디렉토리 레이아웃 규칙을 따르면 툴링에 도움이 됩니다. 해당 레이아웃은 빌드 디렉토리에 미러링됩니다. 즉, -I
플래그를 통해 빌드 디렉터리 경로를 QML 도구에 전달하면 도구에서 플러그인을 찾을 수 있습니다.
© 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.