Auf dieser Seite

QQmlApplicationEngine Class

QQmlApplicationEngine bietet eine bequeme Möglichkeit, eine Anwendung aus einer einzigen QML-Datei zu laden. Mehr...

Überschrift: #include <QQmlApplicationEngine>
CMake: find_package(Qt6 REQUIRED COMPONENTS Qml)
target_link_libraries(mytarget PRIVATE Qt6::Qml)
qmake: QT += qml
Erbt von: QQmlEngine

Öffentliche Funktionen

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

Öffentliche Slots

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)

Signale

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

Ausführliche Beschreibung

Diese Klasse kombiniert eine ` QQmlEngine ` und eine ` QQmlComponent `, um eine bequeme Möglichkeit zum Laden einer einzelnen QML-Datei zu bieten. Außerdem stellt sie einige zentrale Anwendungsfunktionen für QML bereit, die eine C++/QML-Hybridanwendung normalerweise über C++ steuern würde.

Sie kann wie folgt verwendet werden:

#include <QGuiApplication>
#include <QQmlApplicationEngine>

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

Hinweis: Im Gegensatz zu ` QQuickView` erstellt `QQmlApplicationEngine` nicht automatisch ein Root-Fenster. Wenn Sie visuelle Elemente aus ` Qt Quick` verwenden, müssen Sie diese innerhalb eines ` Window` platzieren.

Sie können auch „ QCoreApplication “ mit „QQmlApplicationEngine“ verwenden, sofern Sie keine QML-Module nutzen, die ein „ QGuiApplication “ erfordern (wie beispielsweise „ QtQuick “).

Liste der Konfigurationsänderungen gegenüber einer Standard- QQmlEngine:

  • quitVerbindung von Qt XML-ph-0000@deepl.internal mit QCoreApplication::quit
  • Lädt Übersetzungsdateien automatisch aus einem i18n-Verzeichnis, das sich neben der Haupt-QML-Datei befindet.
  • Übersetzungen werden neu geladen, wenn die Eigenschaft „ QJSEngine::uiLanguage “ / „ Qt.uiLanguage “ geändert wird.
  • Richtet automatisch einen Incubation-Controller ein, wenn die Szene einen „ QQuickWindow “ enthält.
  • Legt automatisch einen „ QQmlFileSelector “ als URL-Interceptor fest, wodurch Dateiselektoren auf alle QML-Dateien und Assets angewendet werden.

Das Verhalten der Engine lässt sich durch die Verwendung der von ` QQmlEngine` geerbten Methoden weiter anpassen.

Hinweis: Übersetzungsdateien müssen das Präfix „qml_“ tragen, um erkannt zu werden, z. B. „qml_ja_JP.qm“.

Hinweis: Um Übersetzungsdateien relativ zur Haupt-QML-Dateizu platzieren , muss dem entsprechenden Aufruf von `qt_add_translations` ein `RESOURCE_PREFIX` hinzugefügt werden. Dieser muss das Ressourcenpräfix des QML-Moduls der Hauptdatei (standardmäßig`/qt/qml` ) sowie die Modul-URI enthalten. Beispiel für die Bereitstellung von Übersetzungsdateien für ein Modul namens „Translated“:

qt_add_translations(App
    RESOURCE_PREFIX /qt/qml/Translated/i18n
    TS_FILE_BASE qml
    TS_FILE_DIR i18n
)

Dokumentation der Mitgliedsfunktionen

QQmlApplicationEngine::QQmlApplicationEngine(QObject *parent = nullptr)

Erstellen Sie eine neue `QQmlApplicationEngine` mit dem angegebenen ` parent`. Sie müssen später die Methode ` load()` aufrufen, um eine QML-Datei zu laden.

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

Erstellt eine neue `QQmlApplicationEngine` und lädt die QML-Datei unter dem angegebenen ` filePath` – dabei muss es sich um eine lokale Datei oder einen QRC-Pfad handeln. Wird ein relativer Pfad angegeben, wird dieser relativ zum Arbeitsverzeichnis der Anwendung interpretiert.

Dies dient der Benutzerfreundlichkeit und entspricht der Verwendung des leeren Konstruktors mit anschließendem Aufruf von `load`.

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

Erstellt eine neue `QQmlApplicationEngine` und lädt die QML-Datei unter dem angegebenen Pfad ` url`. Diese Funktion dient der Vereinfachung und entspricht der Verwendung des leeren Konstruktors mit anschließendem Aufruf von `load`.

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

Erstellt eine neue `QQmlApplicationEngine` und lädt den QML-Typ, der durch ` uri ` und ` typeName ` angegeben wird. Dies dient der Vereinfachung und entspricht der Verwendung des leeren Konstruktors und dem anschließenden Aufruf von ` loadFromModule `.

Diese Funktion wurde in Qt 6.5 eingeführt.

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

Löscht den „ QQmlApplicationEngine “ und alle darin geladenen QML-Objekte.

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

Lädt die QML-Stammdatei unter filePath. filePath muss ein Pfad zu einer lokalen Datei oder zu einer Datei im Ressourcen-Dateisystem sein. Wenn filePath ein relativer Pfad ist, wird er relativ zum Arbeitsverzeichnis der Anwendung interpretiert. Der durch die Datei definierte Objektbaum wird sofort instanziiert.

Tritt ein Fehler auf, werden Fehlermeldungen mit ` qWarning` ausgegeben.

Hinweis: Dieser Slot ist überladen. So stellen Sie eine Verbindung zu diesem Slot her:

// 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); });
Weitere Beispiele und Vorgehensweisen finden Sie unter „Verbindung zu überladenen Slots herstellen“.

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

Lädt die Stamm-QML-Datei unter url. Bei lokalen Datei-URLs wird der durch die Datei definierte Objektbaum sofort erstellt. Remote-URLs werden asynchron geladen; achten Sie auf das Signal „ objectCreated “, um festzustellen, wann der Objektbaum bereit ist.

Tritt ein Fehler auf, wird das Signal ` objectCreated ` mit einem Nullzeiger als Parameter ausgelöst, und Fehlermeldungen werden über ` qWarning` ausgegeben.

Hinweis: Dieser Slot ist überladen. So stellen Sie eine Verbindung zu diesem Slot her:

// 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); });
Weitere Beispiele und Vorgehensweisen finden Sie unter „An überladene Slots anschließen“.

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

Lädt den unter data angegebenen QML-Code. Der unter data definierte Objektbaum wird sofort instanziiert.

Wenn eine URL unter url angegeben ist, wird diese als Basis-URL der Komponente verwendet. Dies wirkt sich auf relative Pfade innerhalb der Daten und auf Fehlermeldungen aus.

Tritt ein Fehler auf, werden Fehlermeldungen unter Verwendung von qWarning ausgegeben.

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

Lädt den QML-Typ „ typeName “ aus dem durch „ uri “ angegebenen Modul. Stammt der Typ aus einer QML-Datei, die sich unter einer Remote-URL befindet, wird er asynchron geladen. Überwachen Sie das Signal „ objectCreated “, um festzustellen, wann der Objektbaum bereit ist.

Tritt ein Fehler auf, wird das Signal „ objectCreated “ mit einem Null-Zeiger als Parameter ausgelöst, und Fehlermeldungen werden über „ qWarning “ ausgegeben.

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

Hinweis: Das durch ` uri ` angegebene Modul wird im Importpfad gesucht, genau wie bei der Verwendung von ` import uri ` innerhalb einer QML-Datei. Kann das Modul dort nicht gefunden werden, schlägt diese Funktion fehl.

Diese Funktion wurde in Qt 6.5 eingeführt.

Siehe auch QQmlComponent::loadFromModule.

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

Dieses Signal wird ausgelöst, wenn das Laden eines Objekts abgeschlossen ist. War der Ladevorgang erfolgreich, enthält ` object ` einen Zeiger auf das geladene Objekt; andernfalls ist der Zeiger NULL.

Außerdem wird der ` url ` auf die Komponente bereitgestellt, von der der ` object ` stammt.

Hinweis: Wenn der Pfad zur Komponente als „ QString “ mit einem relativen Pfad angegeben wurde, enthält „ url “ einen vollständig aufgelösten Pfad zur Datei.

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

Dieses Signal wird ausgegeben, wenn der Ladevorgang aufgrund eines Fehlers abgebrochen wird.

Als Argument wird die „ url “ der Komponente übergeben, deren Laden fehlgeschlagen ist.

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();

Hinweis: Wenn der Pfad zur Komponente als ` QString ` mit einem relativen Pfad angegeben wurde, enthält ` url ` einen vollständig aufgelösten Pfad zur Datei.

Siehe auch „ QQmlApplicationEngine::objectCreated “, das zusätzlich zu diesem Signal ausgelöst wird (auch wenn die Erstellung fehlgeschlagen ist).

Diese Funktion wurde in Qt 6.4 eingeführt.

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

Gibt eine Liste aller von der ` QQmlApplicationEngine` instanziierten Root-Objekte zurück. Diese enthält ausschließlich Objekte, die über ` load()` oder einen Convenience-Konstruktor geladen wurden.

Hinweis: In Qt-Versionen vor 5.9 ist diese Funktion als nicht-const gekennzeichnet.

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

Legt die „ extraFileSelectors “ fest, die an die interne „ QQmlFileSelector “ übergeben werden, die zum Auflösen von URLs in lokale Dateien verwendet wird. Die „ extraFileSelectors “ werden beim Laden der ersten QML-Datei angewendet. Eine nachträgliche Einstellung hat keine Auswirkungen.

Diese Funktion wurde in Qt 6.0 eingeführt.

Siehe auch „ QQmlFileSelector “ und „ QFileSelector::setExtraSelectors “.

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

Legt die „ initialProperties “ fest, mit der die QML-Komponente nach dem Laden initialisiert wird.

QQmlApplicationEngine engine;

EventDatabase eventDatabase;
EventMonitor eventMonitor;

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

Siehe auch „ QQmlComponent::setInitialProperties “, „ QQmlApplicationEngine::load “ und „ 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.