En esta página

Propiedades contextuales

Esta categoría de advertencia se escribe [context-properties] por qmllint.

Se ha detectado un posible acceso a una propiedad de contexto

¿Qué ha ocurrido?

Se ha detectado un posible acceso a una propiedad de contexto.

¿Por qué es malo?

Al utilizar propiedades de contexto en tu código QML, creas una dependencia entre tu código QML y el contexto específico que tienes en mente al escribirlo. Esto limita la reutilización del código, ya que el contexto puede ser diferente en otros lugares en los que se utilice. Además, la dependencia no se declara. Nunca se importa el contexto ni se declara lo que se espera de él. Por lo tanto, cualquiera que intente reutilizar su código tendrá dificultades para averiguar si el lugar donde se reutiliza tiene un contexto suficiente para su código.

Las herramientas QML no pueden utilizar la propiedad context: el compilador no puede compilar este archivo a C++ y qmllint así como QML Language Server no pueden proporcionar advertencias útiles sobre ese archivo.

Ejemplo

// main.cpp
int main(int argc, char **argv)
{
    QGuiApplication app(argc, argv);
    QQuickView view;
    view.rootContext()
        ->setContextProperty("myProperty", QDateTime::currentDateTime());
    view.loadFromModule("MyModule", "Main");
    view.show();
    app.exec();
}
// Main.qml
import QtQuick

Item {
    Component.onCompleted: console.log(myProperty)
}

Para solucionar esta advertencia, puedes

  • Hacer que la propiedad sea requerida.
  • Usar un singleton.
  • Añadir una entrada a .contextProperties.ini.

Utilización de una propiedad obligatoria

Utilice propiedades requeridas para propiedades de contexto que tengan valores diferentes en componentes diferentes. Para solucionar esta advertencia con una propiedad obligatoria, utilice uno de los métodos setInitialProperties en lugar de setContextProperty:

Defina también la propiedad requerida en Main.qml.

// main.cpp
int main(int argc, char **argv)
{
    QGuiApplication app(argc, argv);
    QQuickView view;
    view.setInitialProperties( { {"myProperty", QDateTime::currentDateTime()}  } );
    view.loadFromModule("MyModule", "Main");
    view.show();
    app.exec();
}
// Main.qml
import QtQuick

Item {
    required property date myProperty
    Component.onCompleted: console.log(myProperty)
}

Véase también Exposición de estados de C++ a QML.

Uso de un singleton

Utilice singletons para las propiedades de contexto que tengan el mismo valor en todos los componentes. Para solucionar esta advertencia con un singleton, elimine la llamada a setContextProperty, defina un singleton y sustituya el uso de la propiedad de contexto por la propiedad singleton.

// mysingleton.h
class MySingleton : public QObject {
    Q_OBJECT
    QML_SINGLETON
    QML_ELEMENT
    Q_PROPERTY(QDateTime myProperty MEMBER m_myProperty NOTIFY myPropertyChanged FINAL)

    QDateTime m_myProperty = QDateTime::currentDateTime();
signals:
    void myPropertyChanged();
};
// main.cpp
int main(int argc, char **argv)
{
    QGuiApplication app(argc, argv);
    QQuickView view;
    view.loadFromModule("MyModule", "Main");
    view.show();
    app.exec();
}
// Main.qml
import QtQuick

Item {
    Component.onCompleted: console.log(MySingleton.myProperty)
}

Véase también Exposición de estado de C++ a QML.

Añadir una entrada a .contextProperties.ini

Si no puede sustituir la propiedad de contexto, cree un archivo .contextProperties. ini en el directorio fuente del proyecto si no existe ninguno y escriba el siguiente contenido:

[General]
disableUnqualifiedAccess = "myProperty"
warnOnUsage = "myProperty"
disableHeuristic = false

Para silenciar esta advertencia si el archivo .contextProperties.ini ya existe, añada el nombre de la propiedad de contexto a las listas ya existentes:

[General]
disableUnqualifiedAccess = "someOtherProperty,myProperty"
warnOnUsage = "someOtherProperty,myProperty"
disableHeuristic = false

Consulte también Configuración de propiedades de contexto para obtener más información sobre el formato .contextProperties.ini.

© 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.