Propriétés contextuelles
Cette catégorie d'avertissement a été orthographiée [context-properties] par qmllint.
Accès potentiel à une propriété de contexte détecté
Qu'est-ce qui s'est passé ?
Un accès potentiel à une propriété de contexte a été détecté.
Pourquoi est-ce mauvais ?
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 avez en tête lorsque vous l'écrivez. Cela limite la réutilisation de votre code puisque le contexte peut être différent dans d'autres endroits où il pourrait être utilisé. En outre, la dépendance n'est pas déclarée. Vous n'importez jamais le contexte ou n'indiquez pas ce que vous attendez. Par conséquent, toute personne essayant de réutiliser votre code aura des difficultés à savoir 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é contextuelle : le compilateur ne peut pas compiler ce fichier en C++ et qmllint ainsi que QML Language Server ne peuvent pas fournir d'avertissements utiles sur 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 à
.contextProperties.ini.
Utilisation d'une propriété obligatoire
Utilisez des propriétés obligatoires pour les propriétés de contexte qui ont des valeurs différentes dans différents composants. Pour corriger cet avertissement avec une propriété obligatoire, utilisez l'une des méthodes setInitialProperties au lieu de setContextProperty:
- QQuickView::setInitialProperties,
- QQmlComponent::setInitialProperties,
- QQmlApplicationEngine::setInitialProperties,
- QQmlIncubator::setInitialPropertiesou
- QQuickWidget::setInitialProperties.
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 Exposer l'état de C++ à 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 corriger cet avertissement avec un singleton, supprimez l'appel à setContextProperty, définissez un singleton et remplacez l'utilisation de la propriété contextuelle 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 aussi Exposer l'état de C++ à QML.
Ajout d'une entrée à .contextProperties.ini
Si vous ne pouvez pas remplacer la propriété contextuelle, créez un fichier .contextProperties.ini dans le répertoire source de votre projet, s'il n'y en a pas, et écrivez le contenu suivant :
[General] disableUnqualifiedAccess = "myProperty" warnOnUsage = "myProperty" disableHeuristic = false
Pour faire taire cet avertissement si le fichier .contextProperties.ini existe déjà, ajoutez le nom de la propriété contextuelle aux listes déjà existantes :
[General] disableUnqualifiedAccess = "someOtherProperty,myProperty" warnOnUsage = "someOtherProperty,myProperty" disableHeuristic = false
Voir aussi Paramètres des propriétés de contexte pour plus d'informations sur le format .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.