QML 문서 디렉터리 가져오기
QML 파일의 로컬 디렉토리는 추가 설정이나 구성 없이 가져올 수 있습니다. QML 파일의 원격 디렉터리도 가져올 수 있지만 qmldir
파일이 존재하는 디렉터리 목록이 있어야 합니다. 로컬 디렉터리에는 디렉터리를 가져오는 클라이언트에 제공해야 하는 유형 이름을 정의하고 가져오는 사람이 사용할 수 있는 JavaScript 리소스를 지정하기 위해 선택적으로 qmldir
파일 목록이 포함될 수 있습니다.
로컬 디렉토리 가져오기
로컬 파일 시스템의 모든 QML 파일은 디렉터리의 절대 또는 상대 파일 시스템 경로를 참조하는 import 문을 사용하여 로컬 디렉터리를 가져와서 해당 디렉터리 내에 정의된 객체 유형을 사용할 수 있도록 할 수 있습니다.
로컬 디렉터리에 qmldir
파일이 나열된 디렉터리가 포함되어 있으면 qmldir
파일에 지정된 유형 이름으로 유형을 사용할 수 있으며, 그렇지 않으면 QML 문서의 파일 이름에서 파생된 유형 이름으로 유형을 사용할 수 있습니다. 디렉터리에 qmldir
파일이 지정되지 않은 경우 대문자로 시작하고 ".qml"로 끝나는 파일 이름만 유형으로 노출됩니다.
디렉토리 가져오기는 모듈 가져오기보다 우선순위가 낮습니다. 동일한 네임스페이스로 가져온 모듈과 디렉터리에 같은 이름이 정의되어 있는 경우 모듈의 유형만 사용할 수 있습니다.
예제
다음 QML 프로젝트 디렉터리 구조를 생각해 보세요. 최상위 디렉터리 myapp
아래에는 mycomponents
이라는 하위 디렉터리에 공통 UI 컴포넌트 집합이 있고, main
이라는 하위 디렉터리에는 다음과 같이 메인 애플리케이션 코드가 있습니다:
myapp |- mycomponents |- CheckBox.qml |- DialogBox.qml |- Slider.qml |- main |- application.qml
main/application.qml
파일은 해당 디렉터리의 상대 경로를 사용하여 mycomponents
디렉터리를 임포트할 수 있으므로 해당 디렉터리에 정의된 QML 객체 유형을 사용할 수 있습니다:
디렉터리를 정규화된 로컬 네임스페이스로 가져올 수 있으며, 이 경우 디렉터리에 제공된 모든 유형의 사용은 정규화되어야 합니다:
import "../mycomponents" as MyComponents MyComponents.DialogBox { // ... }
로컬 디렉터리를 가져오는 기능은 애플리케이션 내 구성 요소 세트 및 애플리케이션 프로토타이핑과 같은 경우에 편리하지만, 모듈 디렉터리가 다른 위치로 이동하면 해당 모듈을 가져오는 모든 코드가 관련 import
문을 업데이트해야 합니다. 설치된 모듈을 파일 시스템 경로가 아닌 고유 식별자 문자열로 가져오기 때문에 QML 모듈을 대신 사용하는 경우 이러한 문제를 피할 수 있습니다.
암시적 가져오기
QML 문서가 있는 디렉터리를 자동으로 가져옵니다. "."
등을 명시적으로 가져오지 않아도 됩니다.
참고: QML 문서가 속한 모듈을 지정하는 qmldir 파일이 QML 문서 자체와 같은 디렉터리에 있는지 확인해야 합니다. 그렇지 않으면 암시적 가져오기가 문서가 속한 모듈과 다릅니다. 예를 들어, 다른 QML 문서는 모듈의 컨텍스트에서는 싱글톤이지만 암시적 가져오기의 컨텍스트에서는 싱글톤이 아닐 수 있습니다. 이는 실수의 빈번한 원인입니다.
원격으로 위치한 디렉터리
디렉터리에 qmldir
파일이 나열된 디렉터리가 있는 경우 원격 위치에서 QML 파일의 디렉터리를 가져올 수도 있습니다.
참고: 이는 QML 문서가 있는 디렉터리의 암시적 가져오기에도 적용됩니다. QML 문서를 원격 위치에서 로드하는 경우에는 명시적인 디렉터리 가져오기 문이 포함되어 있지 않더라도 qmldir 파일을 추가해야 합니다. 그렇지 않으면 QML 문서가 서로를 볼 수 없습니다.
예를 들어 앞의 예에서 myapp
디렉터리가 "http://www.my-example-server.com"에서 호스팅되고 mycomponents
디렉터리에 다음과 같이 정의된 qmldir
파일이 포함되어 있다고 가정해 보겠습니다:
CheckBox CheckBox.qml DialogBox DialogBox.qml Slider Slider.qml
그런 다음 이 디렉터리는 원격 mycomponents
디렉터리로 URL을 사용하여 가져올 수 있습니다:
import "http://www.my-example-server.com/myapp/mycomponents" DialogBox { CheckBox { // ... } Slider { // ... } }
파일이 네트워크를 통해 디렉터리를 가져올 때 디렉터리에 있는 qmldir
파일에 지정된 QML 및 JavaScript 파일에만 액세스할 수 있다는 점에 유의하세요.
경고: 원격 서버에서 디렉터리를 가져올 때 개발자는 악성 코드가 로드되지 않도록 항상 신뢰할 수 있는 소스에서 디렉터리만 로드하도록 주의해야 합니다.
디렉터리 목록 qmldir 파일
디렉터리 목록 qmldir
파일은 모듈 정의 qmldir 파일과는 확연히 다릅니다. 디렉터리 목록 qmldir
파일을 사용하면 QML 문서 그룹을 빠르고 쉽게 공유할 수 있지만 문서에 정의된 QML 객체 유형이 등록되는 유형 네임스페이스를 정의하지 않으며 해당 QML 객체 유형의 버전 관리를 지원하지도 않습니다.
qmldir
파일을 나열하는 디렉터리 구문은 다음과 같습니다:
명령 | 구문 | 설명 |
---|---|---|
객체 유형 선언 | <타입명> <파일명> | 객체 유형 선언을 사용하면 지정된 <TypeName> 으로 QML 문서를 노출할 수 있습니다.예제: RoundedButton RoundedBtn.qml |
내부 객체 유형 선언 | 내부 <타입명> <파일명> | 내부 객체 유형 선언을 사용하면 디렉터리 가져오기에 포함된 다른 QML 문서에서만 사용할 수 있는 유형으로 QML 문서를 등록할 수 있습니다. 내부 유형은 디렉터리를 가져오는 클라이언트가 사용할 수 없습니다. 예시: internal HighlightedButton HighlightedBtn.qml |
자바스크립트 리소스 선언 | <식별자> <파일명> | 자바스크립트 리소스 선언을 사용하면 지정된 식별자를 통해 자바스크립트 파일을 노출할 수 있습니다. 예시: MathFunctions mathfuncs.js |
로컬 파일 시스템 디렉토리에 qmldir
파일이 선택적으로 포함될 수 있습니다. 이렇게 하면 엔진이 해당 디렉터리를 임포트하는 클라이언트에게 특정 QML 유형만 노출할 수 있습니다. 또한 디렉토리에 있는 JavaScript 리소스는 qmldir
파일에 선언되지 않는 한 클라이언트에 노출되지 않습니다.
© 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.