Sur cette page

QQmlApplicationEngine Class

QQmlApplicationEngine offre un moyen pratique de charger une application à partir d'un seul fichier QML. En savoir plus...

En-tête : #include <QQmlApplicationEngine>
CMake : find_package(Qt6 REQUIRED COMPONENTS Qml)
target_link_libraries(mytarget PRIVATE Qt6::Qml)
qmake : QT += qml
Hérite de : QQmlEngine

Fonctions publiques

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

Slots publics

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)

Signaux

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

Description détaillée

Cette classe combine une instance de ` QQmlEngine ` et une instance de ` QQmlComponent ` afin de fournir un moyen pratique de charger un seul fichier QML. Elle expose également certaines fonctionnalités centrales de l'application à QML, que l'on contrôlerait normalement depuis C++ dans le cadre d'une application hybride C++/QML.

Elle peut être utilisée comme suit :

#include <QGuiApplication>
#include <QQmlApplicationEngine>

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

Remarque : contrairement à QQuickView, QQmlApplicationEngine ne crée pas automatiquement de fenêtre racine. Si vous utilisez des éléments visuels provenant de Qt Quick, vous devrez les placer à l’intérieur d’un Window.

Vous pouvez également utiliser QCoreApplication avec QQmlApplicationEngine, si vous n'utilisez aucun module QML nécessitant un QGuiApplication (tel que QtQuick).

Liste des modifications de configuration par rapport à un QQmlEngine par défaut :

  • quitConnexion de Qt XML-ph-0000@deepl.internal() à QCoreApplication::quit()
  • Charge automatiquement les fichiers de traduction à partir d’un répertoire i18n adjacent au fichier QML principal.
  • Les traductions sont rechargées lorsque la propriété QJSEngine::uiLanguage / Qt.uiLanguage est modifiée.
  • Définit automatiquement un contrôleur d’incubation si la scène contient un QQuickWindow.
  • Définit automatiquement un QQmlFileSelector comme intercepteur d’URL, appliquant des sélecteurs de fichiers à tous les fichiers QML et ressources.

Le comportement du moteur peut être affiné davantage en utilisant les méthodes héritées de ` QQmlEngine`.

Remarque : les fichiersde traduction doivent comporter le préfixe « qml_ » pour être reconnus, par exemple « qml_ja_JP.qm ».

Remarque : pour placer les fichiers de traduction de manière relative par rapport au fichier QML principal, il faut ajouter un RESOURCE_PREFIX à l’appel qt_add_translations correspondant. Celui-ci doit inclure le préfixe de ressource du module Qml du fichier principal (/qt/qml par défaut) et l’URI du module. Par exemple, pour fournir des fichiers de traduction pour un module appelé « Translated » :

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

Documentation des fonctions membres

QQmlApplicationEngine::QQmlApplicationEngine(QObject *parent = nullptr)

Créez un nouvel objet `QQmlApplicationEngine` avec l'parent` fournie. Vous devrez ensuite appeler la méthode ` load()` pour charger un fichier QML.

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

Crée un nouvel objet `QQmlApplicationEngine` et charge le fichier QML situé à l'filePath indiquée, qui doit être un fichier local ou un chemin qrc. Si un chemin relatif est fourni, il sera interprété comme relatif au répertoire de travail de l'application.

Cette fonctionnalité est fournie à titre de commodité et revient à utiliser le constructeur vide puis à appeler la méthode `load` par la suite.

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

Crée un nouvel objet `QQmlApplicationEngine` et charge le fichier QML à l'url indiquée. Cette fonctionnalité est fournie à titre de commodité et revient au même que d'utiliser le constructeur vide puis d'appeler la méthode `load` par la suite.

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

Crée un nouvel objet `QQmlApplicationEngine` et charge le type QML spécifié par ` uri ` et ` typeName `. Cette fonctionnalité est fournie à titre de commodité et revient à utiliser le constructeur vide puis à appeler ` loadFromModule `.

Cette fonction a été introduite dans Qt 6.5.

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

Supprime l'QQmlApplicationEngine e et tous les objets QML qu'il a chargés.

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

Charge le fichier QML racine situé à l'adresse filePath. filePath doit être un chemin d'accès à un fichier local ou à un fichier du système de ressources. Si filePath est un chemin relatif, il est considéré comme relatif au répertoire de travail de l'application. L'arborescence d'objets définie par le fichier est instanciée immédiatement.

En cas d’erreur, des messages d’erreur sont affichés à l’aide de ` qWarning`.

Remarque : ce slot est surchargé. Pour vous connecter à ce slot :

// 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); });
Pour plus d’exemples et d’approches, voir la section « Connexion à des slots surchargés ».

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

Charge le fichier QML racine situé à l'adresse url. L'arborescence d'objets définie par le fichier est créée immédiatement pour les URL de fichiers locaux. Les URL distantes sont chargées de manière asynchrone ; surveillez le signal « objectCreated » pour déterminer quand l'arborescence d'objets est prête.

En cas d’erreur, le signal ` objectCreated ` est émis avec un pointeur nul comme paramètre et les messages d’erreur sont affichés via ` qWarning`.

Remarque : ce slot est surchargé. Pour vous connecter à ce slot :

// 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); });
Pour plus d’exemples et d’approches, voir la section « Connexion à des slots surchargés ».

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

Charge le code QML indiqué à l'adresse data. L'arborescence d'objets définie par data est instanciée immédiatement.

Si une URL url est spécifiée, elle est utilisée comme URL de base du composant. Cela affecte les chemins relatifs au sein des données et des messages d'erreur.

En cas d’erreur, les messages d’erreur sont affichés en utilisant qWarning.

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

Charge le type QML typeName à partir du module spécifié par uri. Si le type provient d’un fichier QML situé à une URL distante, il sera chargé de manière asynchrone. Écoutez le signal objectCreated pour déterminer quand l’arborescence d’objets est prête.

En cas d’erreur, le signal ` objectCreated ` est émis avec un pointeur nul comme paramètre et des messages d’erreur sont affichés via ` qWarning`.

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

Remarque : le module identifié par uri est recherché dans le chemin d’importation, de la même manière que si vous utilisiez import uri à l’intérieur d’un fichier QML. Si le module ne peut y être localisé, cette fonction échouera.

Cette fonction a été introduite dans Qt 6.5.

Voir également QQmlComponent::loadFromModule.

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

Ce signal est émis lorsqu'un objet a fini de se charger. Si le chargement s'est déroulé avec succès, ` object ` contient un pointeur vers l'objet chargé ; dans le cas contraire, le pointeur est `NULL`.

L'url pointant vers le composant d'où provient l'object est également fourni.

Remarque : si le chemin d’accès au composant a été fourni sous la forme d’une QString contenant un chemin relatif, l’ url contiendra un chemin d’accès complet au fichier.

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

Ce signal est émis lorsque le chargement s'achève en raison d'une erreur.

L'url e du composant dont le chargement a échoué est fourni en tant qu'argument.

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

Remarque : si le chemin d’accès au composant a été fourni sous la forme d’un objet ` QString ` contenant un chemin relatif, l’ url contiendra un chemin d’accès au fichier entièrement résolu.

Voir également QQmlApplicationEngine::objectCreated, qui sera émis en plus de ce signal (même si la création a échoué).

Cette fonction a été introduite dans Qt 6.4.

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

Renvoie une liste de tous les objets racine instanciés par ` QQmlApplicationEngine`. Cette liste ne contiendra que les objets chargés via ` load()` ou un constructeur de commodité.

Remarque : dans les versions de Qt antérieures à la version 5.9, cette fonction est marquée comme non-const.

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

Définit les paramètres « extraFileSelectors » à transmettre à l'QQmlFileSelector interne utilisé pour la résolution des URL vers des fichiers locaux. Ces paramètres « extraFileSelectors » sont appliqués lors du chargement du premier fichier QML. Les définir par la suite n'a aucun effet.

Cette fonction a été introduite dans Qt 6.0.

Voir également QQmlFileSelector et QFileSelector::setExtraSelectors.

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

Définit l'initialProperties e avec laquelle le composant QML est initialisé après son chargement.

QQmlApplicationEngine engine;

EventDatabase eventDatabase;
EventMonitor eventMonitor;

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

Voir également QQmlComponent::setInitialProperties, QQmlApplicationEngine::load et 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.