Qt Qml 컴파일러
Qt Qml 컴파일러 모듈에는 Qt Quick Compiler 및 qmllint와 같은 QML 툴링에 필요한 공유 기능을 포함하고 있습니다. 또한 이 모듈은 툴의 기본 제공 분석 기능을 확장하는 데 사용할 수 있는 QQmlSA 프레임워크를 제공합니다.
모듈 사용
Qt 모듈의 C++ API를 사용하려면 모듈 라이브러리에 직접 또는 다른 종속성을 통해 링크해야 합니다. CMake 및 qmake를 비롯한 여러 빌드 도구가 이를 전용으로 지원합니다.
CMake를 사용한 빌드
` find_package() ` 명령을 사용하여 ` Qt6 ` 패키지 내에서 필요한 모듈 구성 요소를 찾으십시오:
find_package(Qt6 REQUIRED COMPONENTS QmlCompiler)
target_link_libraries(mytarget PRIVATE Qt6::QmlCompiler)자세한 내용은 ‘CMake를 사용한 빌드’ 개요를 참조하십시오.
qmake를 사용한 빌드
qmake를 사용하여 모듈을 빌드하도록 구성하려면, 프로젝트의 .pro 파일에서 QT 변수의 값으로 해당 모듈을 추가하십시오:
QT += QmlCompilerQQmlSA 프레임워크 사용
Qt Qml 컴파일러 모듈은 QML 코드의 정적 분석을 위한 도구를 제공하는 QQmlSA 프레임워크를 제공합니다. 이러한 도구는 구문적 유효성을 보장하고 QML 안티패턴에 대해 경고하는 데 도움이 됩니다.
QML 프로그램에 정적 분석을 추가하려면 플러그인을 작성하면 됩니다. 플러그인은 QML 코드의 요소와 속성에 대해 일련의 분석 패스를 실행합니다. 이러한 패스는 PassManager에 등록할 수 있으며, PassManager는 패스를 관리하고 요소 및 그 자식 요소를 분석하기 위해 호출될 수 있습니다. 패스(pass)란 요소나 속성에 대해 평가되는 특정 규칙이나 조건에 대한 검사입니다. 조건이 충족되면, 패스는 코드에서 식별된 문제에 대해 사용자에게 경고를 보내거나 수정 방법을 제안할 수도 있습니다. 요소와 속성에 대한 분석이 일련의 패스를 순차적으로 실행함으로써 이루어지기 때문에 이를 ‘패스’라고 부릅니다. 각 패스는 오직 하나의 특정 문제만을 식별하는 역할을 해야 합니다. 여러 패스를 조합하면 더 복잡한 분석을 수행할 수 있으며, 이들이 함께 플러그인을 구성합니다. 요소 패스는 shouldRun() 및 run() 라는 두 가지 주요 구성 요소로 정의됩니다. 분석을 수행할 때, 패스 매니저는 루트 요소의 자식 요소를 탐색하면서 만나는 모든 요소에 대해 패스를 실행합니다. 각 요소에 대해, 해당 요소에서 평가된 ` shouldRun() `가 ` true `를 반환하면 ` run() `가 해당 요소에 대해 실행됩니다.
속성에 대한 패스는 세 가지 다른 이벤트, 즉 속성이 바인딩될 때, 읽힐 때, 그리고 쓰여질 때 트리거됩니다. 이는 각각 ` onBinding()`, ` onRead() `, ` onWrite() ` 함수를 오버라이드하여 구현할 수 있습니다.
코드가 커짐에 따라 요소와 속성의 수도 늘어납니다. 이 모든 요소와 속성에 대해 정적 분석 패스를 수행하는 것은 비용이 많이 들 수 있습니다. 따라서 어떤 요소와 속성을 분석할지 결정할 때는 세분화하여 접근하는 것이 좋습니다. 요소의 경우, ` shouldRun() `는 실제 계산을 수행하는 ` run()`를 실행해야 하는지 여부를 판단하기 위한 비용 효율적인 확인 단계로 설계되었습니다. 속성의 경우, 매니저에 패스를 등록할 때 선택이 이루어집니다. ` registerPropertyPass() ` 함수는 ` moduleName`, ` typeName `, ` propertyName ` 문자열을 인수로 받습니다. 이 인수들은 등록된 패스의 영향을 받는 속성 집합을 필터링하는 데 사용됩니다.
예제
QML 정적 분석 튜토리얼에서는 QQmlSA 프레임워크를 사용하여 사용자 정의 qmllint 패스를 만드는 방법을 보여줍니다.
참조
- Qt Qml Compiler C++ Classes - QmlCompiler 모듈에서 제공하는 C++ API
- 정적 분석 기능을 활용하는 QML 툴링
라이선스
Qt Qml 이 컴파일러는 The Qt Company에서 제공하는 상용 라이선스를 통해 이용할 수 있습니다. 또한, Qt GPL 예외 1.0이 적용된 GNU 일반 공중 사용 허가서(GNU General Public License) 버전 3에 의해서도 이용할 수 있습니다. 자세한 내용은 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.