Sur cette page

Propriétés de contexte

Cette catégorie d'avertissement est orthographiée « [context-properties] » par qmllint.

Accès potentiel à une propriété de contexte détecté

Que s'est-il passé ?

Un accès potentiel à une propriété de contexte a été détecté.

Pourquoi est-ce un problème ?

En utilisant des propriétés de contexte dans votre code QML, vous créez une dépendance entre votre code QML et le contexte spécifique que vous aviez à l’esprit lors de son écriture. Cela limite la réutilisabilité de votre code, car le contexte peut être différent dans d’autres endroits où il pourrait être utilisé. De plus, cette dépendance n’est pas déclarée. Vous n’importez jamais le contexte ni n’indiquez d’aucune autre manière ce que vous attendez. Par conséquent, toute personne cherchant à réutiliser votre code aura du mal à déterminer si l'endroit où il est réutilisé dispose d'un contexte suffisant pour votre code.

Les outils QML ne peuvent pas utiliser la propriété context : le compilateur ne peut pas compiler ce fichier en C++ et qmllint QML Language Server fournir d’avertissements utiles concernant ce fichier.

Exemple

// 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)
}

Pour corriger cet avertissement, vous pouvez :

  • Rendre la propriété obligatoire.
  • Utiliser un singleton.
  • Ajouter une entrée dans .contextProperties.ini.

Utilisation d’une propriété obligatoire

Utilisez des propriétés obligatoires pour les propriétés de contexte dont les valeurs varient selon les composants. Pour résoudre cet avertissement à l'aide d'une propriété obligatoire, utilisez l'une des méthodes de setInitialProperties au lieu de setContextProperty:

Définissez également la propriété requise dans 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)
}

Voir aussi « Exposition de l’état depuis C++ vers QML ».

Utilisation d’un singleton

Utilisez des singletons pour les propriétés de contexte qui ont la même valeur dans tous les composants. Pour résoudre cet avertissement à l'aide d'un singleton, supprimez l'appel à ` setContextProperty `, définissez un singleton et remplacez l'utilisation de la propriété de contexte par la propriété du 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)
}

Voir également « Exposition de l'état depuis C++ vers QML ».

Ajouter une entrée au fichier .contextProperties.ini

Si vous ne pouvez pas remplacer la propriété de contexte, créez un fichier .contextProperties.ini dans le répertoire source de votre projet s'il n'en existe pas, et écrivez-y le contenu suivant :

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

Pour désactiver cet avertissement si le fichier ` .contextProperties.ini ` existe déjà, ajoutez le nom de la propriété de contexte à la fin des listes existantes :

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

Voir également Paramètres des propriétés de contexte pour plus d’informations sur le format du fichier ` .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.