QMLランタイムツールによるプロトタイピング

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ファイルのルートオブジェクトがWindowではなくItemの場合、表示するためにはWindowにラップする必要があります。この作業が保留されている間、すでにロードされているトップレベルのオブジェクトはPartialScene オブジェクトで表現されます。qml PartialScene PartialScene.container プロパティはコンテナコンポーネントの QML ソースコードを指す URL を与え、通常、最初にロードされた をラップする を宣言します。このように、ItemをWindowにラップするプロセスはプログラム可能です。デフォルトでは、これら2つの追加QMLファイルはqml実行ファイル内のリソースからロードされます。利用可能な設定は コマンドで一覧できます:Item Window --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;
        }
    }
}

これらのファイルが作成されたら、qml -c オプションを使って、configuration.qml ファイルを含むディレクトリの名前を指定することができます。 オプションは、コンテナ・オブジェクトへのパスを指定します:

$ qml -c simplest mycomponent.qml

qml ランタイムはcontainedObject プロパティを直接設定します。このプロパティはその名前を持つ必要があります。このプロパティが設定されると、ItemWindow に再ペアレントされ、表示されます。このWindowはQMLで宣言されているため、独自のラッパーウィンドウを作成する際には、カスタマイズした方法でリサイズを処理したり、プロトタイピング中に便利だと思われる機能を追加したりと、好きな機能を自由に追加することができます。

AppConfigLocation に何が書かれているかに関わらず、qml -c オプションを使って、configuration.qml ファイルへの完全なパスを指定することもできます。

コンフィギュレーション・ファイルで宣言できる機能に加えて、qml ツールは、コマンドライン・オプションでさらにいくつかの機能を提供する。最新のリストを入手するには、--help オプションを使用する。

本書に含まれる文書の著作権は、それぞれの所有者に帰属します 本書で提供されるドキュメントは、Free Software Foundation が発行したGNU Free Documentation License version 1.3に基づいてライセンスされています。 Qtおよびそれぞれのロゴは、フィンランドおよびその他の国におけるThe Qt Company Ltd.の 商標です。その他すべての商標は、それぞれの所有者に帰属します。