QQmlApplicationEngine Class

QQmlApplicationEngine は、単一の QML ファイルからアプリケーションをロードする便利な方法を提供します。詳細...

Header: #include <QQmlApplicationEngine>
CMake: find_package(Qt6 REQUIRED COMPONENTS Qml)
target_link_libraries(mytarget PRIVATE Qt6::Qml)
qmake: QT += qml
Inherits: QQmlEngine

パブリック関数

QQmlApplicationEngine(QObject *parent = nullptr)
QQmlApplicationEngine(const QString &filePath, QObject *parent = nullptr)
QQmlApplicationEngine(const QUrl &url, QObject *parent = nullptr)
(since 6.5) QQmlApplicationEngine(QAnyStringView uri, QAnyStringView typeName, QObject *parent = nullptr)
virtual ~QQmlApplicationEngine() override
QList<QObject *> rootObjects() const

パブリックスロット

void load(const QString &filePath)
void load(const QUrl &url)
void loadData(const QByteArray &data, const QUrl &url = QUrl())
(since 6.5) void loadFromModule(QAnyStringView uri, QAnyStringView typeName)
(since 6.0) void setExtraFileSelectors(const QStringList &extraFileSelectors)
void setInitialProperties(const QVariantMap &initialProperties)

シグナル

void objectCreated(QObject *object, const QUrl &url)
(since 6.4) void objectCreationFailed(const QUrl &url)

詳細説明

このクラスは、QQmlEngineQQmlComponent を組み合わせ、一つの QML ファイルをロードする便利な方法を提供します。また、C++/QMLハイブリッドアプリケーションが通常C++から制御するような、アプリケーションの中心的な機能をQMLに公開します。

このような使い方ができます:

#include <QGuiApplication>
#include <QQmlApplicationEngine>

int main(int argc, char *argv[])
{
    QGuiApplication app(argc, argv);
    QQmlApplicationEngine engine("main.qml");
    return app.exec();
}

QQuickView とは異なり、QQmlApplicationEngine はルートウィンドウを自動生成しません。Qt Quick のビジュアルアイテムを使用する場合は、Window の中に配置する必要があります。

QQmlApplicationEngine では、QGuiApplication を必要とする QML モジュール(QtQuick など)を使用していなければ、QCoreApplication を使用することもできます。

デフォルトのQQmlEngine からの設定変更のリスト:

  • Qt の接続quit() からQCoreApplication::quit() へ
  • メインの QML ファイルに隣接する i18n ディレクトリから翻訳ファイルを自動的に読み込みます。
    • 翻訳ファイルには、"qml_"というプレフィックスが必要です(例:qml_ja_JP.qm)。
  • QJSEngine::uiLanguage /Qt.uiLanguage プロパティが変更されると、翻訳ファイルはリロードされます。
  • シーンにQQuickWindow が含まれている場合、自動的に孵化コントローラを設定します。
  • URL インターセプターとしてQQmlFileSelector を自動的に設定し、すべての QML ファイルとアセットにファイル セレクターを適用します。

QQmlEngine から継承したメソッドを使用することで、エンジンの動作をさらに微調整することができます。

メンバー関数ドキュメント

QQmlApplicationEngine::QQmlApplicationEngine(QObject *parent = nullptr)

与えられたparent で新しい QQmlApplicationEngine を作成します。QML ファイルを読み込むには、後でload() を呼び出す必要があります。

QQmlApplicationEngine::QQmlApplicationEngine(const QString &filePath, QObject *parent = nullptr)

新しい QQmlApplicationEngine を作成し、与えられたfilePath にある QML ファイルをロードします。 はローカルファイルまたは qrc パスでなければなりません。相対パスが指定された場合は、アプリケーションの作業ディレクトリからの相対パスとして解釈されます。

これは便宜的なものであり、空のコンストラクタを使用し、その後に load を呼び出すのと同じです。

QQmlApplicationEngine::QQmlApplicationEngine(const QUrl &url, QObject *parent = nullptr)

新しい QQmlApplicationEngine を作成し、与えられたurl にある QML ファイルをロードします。これは便宜上提供されているもので、空のコンストラクタを使用し、その後にloadを呼び出すのと同じです。

[explicit, since 6.5] QQmlApplicationEngine::QQmlApplicationEngine(QAnyStringView uri, QAnyStringView typeName, QObject *parent = nullptr)

新しい QQmlApplicationEngine を作成し、uritypeName で指定された QML タイプをロードします。これは便宜上提供されているもので、空のコンストラクタを使用し、その後にloadFromModule を呼び出すのと同じです。

この関数は Qt 6.5 で導入されました。

[override virtual noexcept] QQmlApplicationEngine::~QQmlApplicationEngine()

QQmlApplicationEngine とそれが読み込んだすべての QML オブジェクトを破棄します。

[slot] void QQmlApplicationEngine::load(const QString &filePath)

filePath にあるルート QML ファイルを読み込みます。filePath はローカルファイルへのパスか、リソースファイルシステム内のファイルへのパスでなければなりません。filePath が相対パスの場合、アプリケーションの作業ディレクトリからの相対パスとみなされます。ファイルによって定義されたオブジェクト・ツリーは直ちにインスタンス化される。

エラーが発生した場合、エラーメッセージはqWarning で表示されます。

[slot] void QQmlApplicationEngine::load(const QUrl &url)

url にあるルート QML ファイルを読み込みます。ファイルによって定義されたオブジェクトツリーは、ローカルファイルの URL に対して直ちに作成されます。リモートのURLは非同期にロードされます。オブジェクトツリーの準備ができたかどうかはobjectCreated シグナルを聞いて判断してください。

エラーが発生した場合、NULLポインタをパラメータとしてobjectCreated シグナルが発行され、エラーメッセージはqWarning で表示されます。

[slot] void QQmlApplicationEngine::loadData(const QByteArray &data, const QUrl &url = QUrl())

data で指定されたQMLをロードします。data で定義されたオブジェクトツリーは直ちにインスタンス化されます。

url が指定された場合、それがコンポーネントのベースURLとして使用されます。これはデータやエラーメッセージの相対パスに影響します。

エラーが発生した場合、エラーメッセージはqWarning で表示されます。

[slot, since 6.5] void QQmlApplicationEngine::loadFromModule(QAnyStringView uri, QAnyStringView typeName)

uri で指定されたモジュールから QML の型typeName を読み込みます。型がリモートのURLにあるQMLファイルに由来する場合、型は非同期にロードされます。オブジェクトツリーの準備ができたらobjectCreated シグナルを聞いてください。

エラーが発生した場合、objectCreated シグナルがNULLポインタをパラメータとして発せられ、エラーメッセージはqWarning で表示されます。

QQmlApplicationEngine engine;
engine.loadFromModule("QtQuick", "Rectangle");

注: uri で特定されたモジュールは、QMLファイル内でimport uri を実行するのと同じように、インポートパスで検索されます。モジュールがその場所に見つからない場合、この関数は失敗します。

この関数は Qt 6.5 で導入されました。

QQmlComponent::loadFromModuleも参照してください

[signal] void QQmlApplicationEngine::objectCreated(QObject *object, const QUrl &url)

このシグナルはオブジェクトのロードが終了したときに発せられます。ロードが成功した場合、object はロードされたオブジェクトへのポインタを含み、そうでない場合、ポインタはNULLです。

object の元となったコンポーネントへのurl も提供される。

注意: コンポーネントへのパスが相対パスを含むQString として提供された場合、url にはファイルへの完全に解決されたパスが含まれます。

[signal, since 6.4] void QQmlApplicationEngine::objectCreationFailed(const QUrl &url)

このシグナルは、エラーが発生して読み込みが終了したときに発行されます。

ロードに失敗したコンポーネントへのurl が引数として提供される。

QGuiApplication app(argc, argv);
QQmlApplicationEngine engine;

// exit on error
QObject::connect(&engine, &QQmlApplicationEngine::objectCreationFailed,
    &app, []() { QCoreApplication::exit(-1); }, Qt::QueuedConnection);
engine.load(QUrl());
return app.exec();

注意: コンポーネントへのパスが相対パスを含むQString として提供された場合、url にはファイルへの完全に解決されたパスが含まれる。

QQmlApplicationEngine::objectCreated も参照してください。(作成に失敗しても)このシグナルに加えて発行されます。

この関数は Qt 6.4 で導入されました。

QList<QObject *> QQmlApplicationEngine::rootObjects() const

QQmlApplicationEngine によってインスタンス化されたすべてのルートオブジェクトのリストを返します。 これには、load() またはコンビニエンスコンストラクタによってロードされたオブジェクトのみが含まれます。

注意: Qt 5.9 より前のバージョンでは、この関数は非const としてマークされています。

[slot, since 6.0] void QQmlApplicationEngine::setExtraFileSelectors(const QStringList &extraFileSelectors)

ローカルファイルへの URL の解決に使用される内部QQmlFileSelector に渡されるextraFileSelectors を設定します。extraFileSelectors は最初の QML ファイルがロードされたときに適用されます。それ以降に設定しても効果はありません。

この関数は Qt 6.0 で導入されました。

QQmlFileSelectorQFileSelector::setExtraSelectorsも参照してください

[slot] void QQmlApplicationEngine::setInitialProperties(const QVariantMap &initialProperties)

QML コンポーネントがロードされた後に初期化されるinitialProperties を設定します。

QQmlApplicationEngine engine;

EventDatabase eventDatabase;
EventMonitor eventMonitor;

engine.setInitialProperties({
    { "eventDatabase", QVariant::fromValue(&eventDatabase) },
    { "eventMonitor", QVariant::fromValue(&eventMonitor) }
});

QQmlComponent::setInitialPropertiesQQmlApplicationEngine::loadQQmlApplicationEngine::loadDataも参照して ください。

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