Auf dieser Seite

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.ini hinzu.

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:

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.