En esta página

QQmlApplicationEngine Class

QQmlApplicationEngine proporciona una forma cómoda de cargar una aplicación desde un único archivo QML. Más...

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

Funciones Públicas

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

Ranuras Públicas

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)

Señales

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

Descripción detallada

Esta clase combina QQmlEngine y QQmlComponent para proporcionar una forma cómoda de cargar un único archivo QML. También expone algunas funcionalidades centrales de la aplicación a QML, que una aplicación híbrida C++/QML normalmente controlaría desde C++.

Se puede utilizar de este modo:

#include <QGuiApplication>
#include <QQmlApplicationEngine>

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

Nota: A diferencia de QQuickView, QQmlApplicationEngine no crea automáticamente una ventana raíz. Si utiliza elementos visuales de Qt Quick, deberá colocarlos dentro de una Window.

También puede utilizar QCoreApplication con QQmlApplicationEngine, si no está utilizando ningún módulo QML que requiera un QGuiApplication (como QtQuick).

Lista de cambios de configuración desde un QQmlEngine por defecto :

  • Conectando Qt.quit() a QCoreApplication::quit()
  • Carga automáticamente los archivos de traducción desde un directorio i18n adyacente al archivo QML principal.
  • Las traducciones se recargan cuando se cambia la propiedad QJSEngine::uiLanguage / Qt.uiLanguage.
  • Establece automáticamente un controlador de incubación si la escena contiene un QQuickWindow.
  • Establece automáticamente un QQmlFileSelector como interceptor de url, aplicando selectores de archivo a todos los archivos y activos QML.

El comportamiento del motor puede ajustarse aún más utilizando los métodos heredados de QQmlEngine.

Nota: Los archivos de traducción deben tener un prefijo qml_ para ser reconocidos, por ejemplo qml_ja_JP.qm.

Nota: La colocación de los archivos de traducción en relación con el archivo QML principal implica añadir un RESOURCE_PREFIX a la llamada qt_add_translations correspondiente. Esto debe incluir el prefijo de recurso del módulo QML del archivo principal(/qt/qml por defecto) y el URI del módulo. Por ejemplo, para proporcionar archivos de traducción para un módulo llamado "Translated":

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

Documentación de funciones miembro

QQmlApplicationEngine::QQmlApplicationEngine(QObject *parent = nullptr)

Crea un nuevo QQmlApplicationEngine con la dirección parent. Más adelante tendrás que llamar a load() para cargar un archivo QML.

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

Crea un nuevo QQmlApplicationEngine y carga el archivo QML en la dirección filePath, que debe ser un archivo local o una ruta qrc. Si se indica una ruta relativa, se interpretará como relativa al directorio de trabajo de la aplicación.

Esto se proporciona por comodidad, y es lo mismo que utilizar el constructor vacío y llamar a load después.

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

Crea un nuevo QQmlApplicationEngine y carga el archivo QML en la dirección url. Esto se proporciona por conveniencia, y es lo mismo que usar el constructor vacío y llamar a load después.

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

Crea un nuevo QQmlApplicationEngine y carga el tipo QML especificado por uri y typeName Esto se proporciona por conveniencia, y es lo mismo que usar el constructor vacío y llamar a loadFromModule después.

Esta función se introdujo en Qt 6.5.

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

Destruye la página QQmlApplicationEngine y todos los objetos QML que haya cargado.

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

Carga el archivo QML raíz ubicado en filePath. filePath debe ser una ruta a un archivo local o una ruta a un archivo en el sistema de archivos de recursos. Si filePath es una ruta relativa, se toma como relativa al directorio de trabajo de la aplicación. El árbol de objetos definido por el fichero se instanciará inmediatamente.

Si se produce un error, los mensajes de error se imprimen con qWarning.

Nota: Esta ranura está sobrecargada. Para conectarse a esta ranura:

// 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); });
Para más ejemplos y enfoques, véase conectar con ranuras sobrecargadas.

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

Carga el archivo QML raíz ubicado en url. El árbol de objetos definido por el archivo se crea inmediatamente para las urls de archivos locales. Las urls remotas se cargan de forma asíncrona, escuchando la señal objectCreated para determinar cuándo está listo el árbol de objetos.

Si se produce un error, se emite la señal objectCreated con un puntero nulo como parámetro y los mensajes de error se imprimen con qWarning.

Nota: Esta ranura está sobrecargada. Para conectarse a esta ranura:

// 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); });
Para más ejemplos y enfoques, véase conectar con ranuras sobrecargadas.

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

Carga el QML dado en data. El árbol de objetos definido por data se instanciará inmediatamente.

Si se especifica un url se utiliza como url base del componente. Esto afecta a las rutas relativas dentro de los datos y los mensajes de error.

Si se produce un error, los mensajes de error se imprimen con qWarning.

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

Carga el tipo QML typeName desde el módulo especificado por uri. Si el tipo se origina en un archivo QML ubicado en una url remota, el tipo se cargará de forma asíncrona. Escucha la señal objectCreated para determinar cuándo está listo el árbol de objetos.

Si se produce un error, se emite la señal objectCreated con un puntero nulo como parámetro y los mensajes de error se imprimen con qWarning.

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

Nota: El módulo identificado por uri se busca en la ruta de importación, de la misma manera que si estuviera haciendo import uri dentro de un archivo QML. Si el módulo no puede ser localizado allí, esta función fallará.

Esta función se introdujo en Qt 6.5.

Véase también QQmlComponent::loadFromModule.

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

Esta señal se emite cuando un objeto termina de cargarse. Si la carga se ha realizado correctamente, object contiene un puntero al objeto cargado; en caso contrario, el puntero es NULL.

También se proporciona el url al componente del que procede el object.

Nota: Si la ruta al componente se proporcionó como QString conteniendo una ruta relativa, url contendrá una ruta completamente resuelta al archivo.

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

Esta señal se emite cuando finaliza la carga porque se ha producido un error.

El url al componente que falló al cargar se proporciona como argumento.

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

Nota: Si la ruta al componente se proporcionó como QString conteniendo una ruta relativa, url contendrá una ruta completamente resuelta al archivo.

Véase también QQmlApplicationEngine::objectCreated, que se emitirá además de esta señal (aunque la creación haya fallado).

Esta función se introdujo en Qt 6.4.

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

Devuelve una lista de todos los objetos raíz instanciados por QQmlApplicationEngine. Sólo contendrá objetos cargados mediante load() o un constructor de conveniencia.

Nota: En versiones de Qt anteriores a la 5.9, esta función está marcada como noconst.

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

Establece el extraFileSelectors que se pasará al QQmlFileSelector interno utilizado para resolver URL a archivos locales. extraFileSelectors se aplica cuando se carga el primer archivo QML. Establecerlos después no tiene ningún efecto.

Esta función se introdujo en Qt 6.0.

Véase también QQmlFileSelector y QFileSelector::setExtraSelectors.

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

Establece la dirección initialProperties con la que se inicializa el componente QML una vez cargado.

QQmlApplicationEngine engine;

EventDatabase eventDatabase;
EventMonitor eventMonitor;

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

Véase también QQmlComponent::setInitialProperties, QQmlApplicationEngine::load, y 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.