재사용 가능한 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 에서 이미지 제공자를 등록하는 것과 같은 더 고급 작업을 수행해야 하는 경우, 여전히 수동으로 플러그인을 작성해야 합니다. qt_add_qml_module() 은 NO_GENERATE_PLUGIN_SOURCE 를 통해 이를 지원합니다.

또한, 디렉터리 구조 규칙을 따르는 것이 툴 사용에 도움이 됩니다. 이 구조는 빌드 디렉터리에도 그대로 반영됩니다. 즉, QML 툴에 빌드 디렉터리의 경로를 ( -I 플래그를 통해) 전달하면 툴이 플러그인을 찾아낼 수 있습니다.

© 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.