Kontext-Eigenschaften
Diese Warnkategorie wird von qmllint mit [context-properties] geschrieben.
Potenzieller Zugriff auf Kontexteigenschaften entdeckt
Was ist passiert?
Es wurde ein potenzieller Zugriff auf eine Kontexteigenschaft festgestellt.
Warum ist das schlecht?
Durch die Verwendung von Kontexteigenschaften in Ihrem QML-Code schaffen Sie eine Abhängigkeit zwischen Ihrem QML-Code und dem spezifischen Kontext, den Sie im Kopf haben, wenn Sie ihn schreiben. Dies schränkt die Wiederverwendbarkeit Ihres Codes ein, da der Kontext an anderen Stellen, an denen er verwendet werden könnte, anders sein kann. Außerdem wird die Abhängigkeit nicht deklariert. Sie importieren den Kontext nicht und geben auch nicht an, was Sie erwarten. Daher wird jeder, der versucht, Ihren Code wiederzuverwenden, Schwierigkeiten haben, herauszufinden, ob der Ort, an dem er wiederverwendet wird, einen für Ihren Code ausreichenden Kontext hat.
QML-Werkzeuge können die Kontexteigenschaft nicht verwenden: der Compiler kann diese Datei nicht nach C++ kompilieren und qmllint sowie QML Language Server kann keine nützlichen Warnungen zu dieser Datei liefern.
Beispiel
// 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) }
Um diese Warnung zu beheben, können Sie:
- Machen Sie die Eigenschaft erforderlich.
- Ein Singleton verwenden.
- Fügen Sie einen Eintrag zu
.contextProperties.inihinzu.
Verwendung einer erforderlichen Eigenschaft
Verwenden Sie erforderliche Eigenschaften für Kontexteigenschaften, die in verschiedenen Komponenten unterschiedliche Werte haben. Um diese Warnung mit einer erforderlichen Eigenschaft zu beheben, verwenden Sie eine der Methoden setInitialProperties anstelle von setContextProperty:
- QQuickView::setInitialProperties,
- QQmlComponent::setInitialProperties,
- QQmlApplicationEngine::setInitialProperties,
- QQmlIncubator::setInitialProperties, oder
- QQuickWidget::setInitialProperties.
Definieren Sie auch die gewünschte Eigenschaft in 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) }
Siehe auch Freigabe des Zustands von C++ zu QML.
Verwendung eines Singletons
Verwenden Sie Singletons für Kontexteigenschaften, die in allen Komponenten den gleichen Wert haben. Um diese Warnung mit einem Singleton zu beheben, entfernen Sie den Aufruf setContextProperty, definieren Sie ein Singleton und ersetzen Sie die Verwendung der Kontexteigenschaft durch die Singleton-Eigenschaft.
// 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) }
Siehe auch Exposing State von C++ zu QML.
Hinzufügen eines Eintrags zu .contextProperties.ini
Wenn Sie die Kontexteigenschaft nicht ersetzen können, erstellen Sie eine .contextProperties.ini-Datei in Ihrem Projekt-Quellverzeichnis, falls keine vorhanden ist, und schreiben Sie den folgenden Inhalt:
[General] disableUnqualifiedAccess = "myProperty" warnOnUsage = "myProperty" disableHeuristic = false
Um diese Warnung zu unterdrücken, wenn die Datei .contextProperties.ini bereits existiert, fügen Sie den Namen der Kontexteigenschaft an die bereits vorhandenen Listen an:
[General] disableUnqualifiedAccess = "someOtherProperty,myProperty" warnOnUsage = "someOtherProperty,myProperty" disableHeuristic = false
Siehe auch Einstellungen für Kontexteigenschaften für weitere Informationen über das 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.