QML Runtime 도구로 프로토타이핑하기

Qt에는 QML 문서를 로드하고 표시하는 유틸리티인 qml 실행 파일이 포함되어 있습니다.

qml 유틸리티는 주로 QML 애플리케이션 및 컴포넌트를 테스트하기 위한 것입니다. 프로덕션 환경에서 QML 애플리케이션을 실행하려면 사용자 지정 C++ 애플리케이션을 개발하거나 모듈에 QML 파일을 번들로 묶어야 하는 경우가 많습니다. 자세한 내용은 QML 애플리케이션 배포하기를 참조하세요. 루트 요소로 Item 을 지정하면 qml 이 자동으로 창을 생성하여 장면을 표시합니다. 참고로 QQmlComponent::create()는 그렇게 하지 않습니다. 따라서 qml 으로 개발한 프로토타입을 C++ 애플리케이션으로 옮길 때는 루트 요소가 Window 인지 확인하거나 C++에서 QQuickView 를 생성하여 루트 Item 를 보유해야 합니다. 하지만 그 동안에는 qml 도구를 사용하여 프로토타입의 일부를 별도로 로드하고 테스트할 수 있습니다.

.qml 파일을 로드하려면 명령 프롬프트에 파일 경로를 입력합니다:

$ qml myqmlfile.qml

구성 옵션을 보려면 --help 인수를 사용하여 qml 을 실행하세요.

로드 중인 QML 파일의 루트 개체가 창이 아닌 항목인 경우에는 창으로 감싸서 표시해야 합니다. 이 작업이 보류되는 동안 이미 로드된 최상위 수준 개체는 PartialScene 개체로 표시됩니다. 그런 다음 qml 도구는 다음에 수행할 작업을 결정하기 위해 추가 QML 파일을 로드합니다. 하나는 PartialScene 을 어떤 종류의 컨테이너로 래핑할지 지정하는 구성 파일입니다. PartialScene.container 속성은 컨테이너 구성 요소의 QML 소스 코드를 가리키는 URL을 제공하며, 일반적으로 먼저 로드된 Item 을 래핑할 Window 을 선언해야 합니다. 따라서 항목을 창으로 래핑하는 프로세스는 프로그래밍할 수 있으며, 기본적으로 이 두 개의 추가 QML 파일은 qml 실행 파일 내부의 리소스에서 로드됩니다. --list-conf 명령으로 사용 가능한 구성을 나열할 수 있습니다:

$ qml --list-conf
Built-in configurations:
  default
  resizeToItem

default 구성은 시작 시와 사용자가 창 크기를 조정할 때 루트 항목의 크기가 래퍼 창을 채우도록 조정되는 기본 동작을 제공합니다. resizeToItem 구성은 반대로 작동합니다. 항목이 프로그래밍 방식으로 자체 크기를 설정할 수 있으며(예: 자체 widthheight 속성에 대한 바인딩 생성), 래퍼 창이 그에 맞게 크기가 조정됩니다(창 시스템에 의해 부과될 수 있는 제한에 따름). -c 또는 --config 옵션을 사용하여 이 중 하나를 선택할 수 있습니다:

$ qml -c resizeToItem selfResizingItem.qml

QStandardPaths::AppConfigLocation 에 구성 디렉터리를 만들어 추가 구성을 추가할 수 있으며, 각 디렉터리에는 configuration.qml 이라는 이름의 구성 파일과 임의의 이름을 가질 수 있는 항목 래퍼를 선언하는 QML 파일 두 개가 들어 있습니다. 이 작업을 완료한 경우 qml --list-conf 명령은 이러한 추가 구성을 나열하고 --verbose 옵션은 이러한 구성을 확장하여 해당 구성의 전체 경로와 검색된 추가 위치를 제공합니다:

$ qml --list-conf --verbose
Built-in configurations:
  default
  resizeToItem
Other configurations:
  /home/myuser/.config/QtProject/Qml Runtime/simplest
Checked in:
  /home/myuser/.config/QtProject/Qml Runtime
  /etc/xdg/QtProject/Qml Runtime

다음은 configuration.qml 파일의 예입니다:

import QmlRuntime.Config

Configuration {
    PartialScene {
        itemType: "QQuickItem"
        container: Qt.resolvedUrl("ItemWrapper.qml")
    }
}

다음은 container 속성이 가리킬 수 있는 가장 간단한 ItemWrapper.qml 입니다:

import QtQuick

Window {
    required property Item containedObject: null
    onContainedObjectChanged: {
        if (containedObject == undefined || containedObject == null) {
            visible = false;
        } else {
            containedObject.parent = contentItem;
            visible = true;
        }
    }
}

이러한 파일이 생성되면 configuration.qml 파일이 포함된 디렉터리 이름을 지정하는 qml -c 옵션을 사용하여 컨테이너 객체의 경로를 지정할 수 있습니다:

$ qml -c simplest mycomponent.qml

qml 런타임은 해당 이름을 갖기 위해 필요한 containedObject 속성을 직접 설정하며, 설정이 완료되면 ItemWindow 으로 부모를 변경하여 표시합니다. 이 창은 QML로 선언되므로 자체 래퍼 창을 작성할 때 원하는 기능을 자유롭게 추가할 수 있습니다. 사용자 지정 방식으로 크기 조정을 처리하거나 프로토타이핑 중에 유용할 수 있는 기능을 추가하는 등 원하는 기능을 추가할 수 있습니다.

AppConfigLocation 에서 찾은 것과 관계없이 qml -c 옵션을 사용하여 configuration.qml 파일의 전체 경로를 지정할 수 있으며, 이 옵션은 컨테이너 객체의 전체 경로를 지정할 수 있으므로 이러한 파일은 어디에서나 찾을 수 있습니다.

구성 파일에서 선언할 수 있는 기능 외에도 qml 도구는 명령줄 옵션을 통해 몇 가지 기능을 더 제공합니다. --help 옵션을 사용하면 최신 목록을 볼 수 있습니다.

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