QQmlApplicationEngine Class
QQmlApplicationEngine を使用すると、単一の QML ファイルからアプリケーションを簡単に読み込むことができます。詳細...
| ヘッダー: | #include <QQmlApplicationEngine> |
| CMake: | find_package(Qt6 REQUIRED COMPONENTS Qml) target_link_libraries(mytarget PRIVATE Qt6::Qml) |
| qmake: | QT += qml |
| 継承元: | 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) |
詳細な説明
このクラスは、QQmlEngine とQQmlComponent を組み合わせ、単一の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 内に配置する必要があります。
また、QGuiApplication (QtQuick など)を必要とするQMLモジュールを使用していない場合は、QCoreApplication をQQmlApplicationEngineと併用することも可能です。
デフォルトのQQmlEngine からの設定変更点は以下の通りです:
- Qt XML.quit() をQCoreApplication::quit() に接続
- メインの QML ファイルに隣接する i18n ディレクトリから翻訳ファイルを自動的に読み込みます。
QJSEngine::uiLanguage/Qt.uiLanguageプロパティが変更されると、翻訳が再読み込みされます。- シーンにQQuickWindow が含まれている場合、自動的にインキュベーションコントローラを設定します。
QQmlFileSelectorがシーンに含まれている場合、 を URL インターセプターとして自動的に設定し、すべての QML ファイルおよびアセットにファイルセレクタを適用します。
QQmlEngine から継承されたメソッドを使用することで、エンジンの動作をさらに微調整することができます。
注:翻訳ファイルが 認識されるためには、qml_というプレフィックスを付ける必要があります(例:qml_ja_JP.qm)。
注: 翻訳ファイルをメインの QML ファイルに対して相対的な場所に配置するには 、関連するqt_add_translations呼び出しにRESOURCE_PREFIXを追加する必要があります。これには、メインファイルの QML モジュールのリソースプレフィックス(デフォルトでは/qt/qml)とモジュール URI を含める必要があります。 たとえば、「Translated」というモジュール用の翻訳ファイルを提供するには、次のようにします。
qt_add_translations(App
RESOURCE_PREFIX /qt/qml/Translated/i18n
TS_FILE_BASE qml
TS_FILE_DIR i18n
)メンバ関数のドキュメント
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 を作成し、uri およびtypeName で指定された QML タイプを読み込みます。これは利便性を考慮して提供されている機能であり、空のコンストラクタを使用し、その後loadFromModule を呼び出すのと同じ動作をします。
この関数は Qt 6.5 で導入されました。
[override virtual noexcept] QQmlApplicationEngine::~QQmlApplicationEngine()
QQmlApplicationEngine およびそこに読み込まれたすべてのQMLオブジェクトを破棄します。
[slot] void QQmlApplicationEngine::load(const QString &filePath)
filePath にあるルート QML ファイルを読み込みます。filePath は、ローカルファイルへのパス、またはリソースファイルシステム内のファイルへのパスでなければなりません。filePath が相対パスである場合、アプリケーションの作業ディレクトリを基準とする相対パスとして扱われます。ファイルによって定義されたオブジェクトツリーは直ちにインスタンス化されます。
エラーが発生した場合、qWarning によってエラーメッセージが出力されます。
注:この スロットは オーバーロードされています。このスロットに接続するには:
// Connect using qOverload:
connect(sender, &SenderClass::signal,
qmlApplicationEngine, qOverload(&QQmlApplicationEngine::load));
// Or using a lambda as wrapper:
connect(sender, &SenderClass::signal,
qmlApplicationEngine, [receiver = qmlApplicationEngine](const QString &filePath) { receiver->load(filePath); }); [slot] void QQmlApplicationEngine::load(const QUrl &url)
url にあるルート QML ファイルを読み込みます。ローカルファイルの URL の場合、ファイルで定義されたオブジェクトツリーは即座に作成されます。リモート URL の場合は非同期で読み込まれ、オブジェクトツリーの準備が整ったことを確認するには、objectCreated シグナルを監視してください。
エラーが発生した場合は、objectCreated シグナルがnullポインタをパラメータとして発火され、qWarning を通じてエラーメッセージが出力されます。
注:この スロットは オーバーロードされています。このスロットに接続するには:
// Connect using qOverload:
connect(sender, &SenderClass::signal,
qmlApplicationEngine, qOverload(&QQmlApplicationEngine::load));
// Or using a lambda as wrapper:
connect(sender, &SenderClass::signal,
qmlApplicationEngine, [receiver = qmlApplicationEngine](const QUrl &url) { receiver->load(url); }); [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 で導入されました。
「 QQmlFileSelector 」および「QFileSelector::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::setInitialProperties 」、「QQmlApplicationEngine::load 」、および「QQmlApplicationEngine::loadData 」も参照してください 。
© 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.