Kontext-Eigenschaften
Diese Warnkategorie wird von qmllint als „ [context-properties] “ bezeichnet.
Möglicher Zugriff auf eine Kontexteigenschaft erkannt
Was ist passiert?
Ein potenzieller Zugriff auf eine Kontexteigenschaft wurde erkannt.
Warum ist das schlecht?
Durch die Verwendung von Kontexteigenschaften in Ihrem QML-Code schaffen Sie eine Abhängigkeit Ihres QML-Codes von dem spezifischen Kontext, den Sie beim Schreiben im Sinn hatten. Dies schränkt die Wiederverwendbarkeit Ihres Codes ein, da der Kontext an anderen Stellen, an denen er möglicherweise verwendet wird, unterschiedlich sein kann. Darüber hinaus ist die Abhängigkeit nicht deklariert. Sie importieren den Kontext nie und geben auch anderweitig nicht an, was Sie erwarten. Daher wird es für jeden, der versucht, Ihren Code wiederzuverwenden, schwierig sein, herauszufinden, ob der Ort, an dem er wiederverwendet wird, über einen für Ihren Code ausreichenden Kontext verfügt.
QML-Tools können die Eigenschaft „context“ nicht verwenden: Der Compiler kann diese Datei nicht in C++ kompilieren, und weder qmllint noch QML Language Server keine hilfreichen Warnungen zu dieser Datei ausgeben.
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:
- Die Eigenschaft als erforderlich kennzeichnen.
- Verwenden Sie ein Singleton.
- Fügen Sie einen Eintrag unter „
.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 anstelle von ` setContextProperty` eine der Methoden unter setInitialProperties:
- QQuickView::setInitialProperties,
- QQmlComponent::setInitialProperties,
- QQmlApplicationEngine::setInitialProperties,
- QQmlIncubator::setInitialPropertiesoder
- QQuickWidget::setInitialProperties.
Definieren Sie außerdem die erforderliche 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 „Exposing State from C++ to QML“.
Verwendung eines Singletons
Verwenden Sie Singletons für Kontexteigenschaften, die in allen Komponenten denselben Wert haben. Um diese Warnung mit einem Singleton zu beheben, entfernen Sie den Aufruf von ` 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 „Bereitstellung von Zuständen von C++ nach QML“.
Hinzufügen eines Eintrags zu „.contextProperties.ini“
Wenn Sie die Kontexteigenschaft nicht ersetzen können, erstellen Sie im Quellverzeichnis Ihres Projekts eine Datei „.contextProperties.ini“, falls noch keine vorhanden ist, und fügen Sie folgenden Inhalt ein:
[General]
disableUnqualifiedAccess = "myProperty"
warnOnUsage = "myProperty"
disableHeuristic = falseUm diese Warnung zu unterdrücken, wenn die Datei „ .contextProperties.ini “ bereits vorhanden ist, fügen Sie den Namen der Kontext-Eigenschaft an das Ende der bereits vorhandenen Listen an:
[General]
disableUnqualifiedAccess = "someOtherProperty,myProperty"
warnOnUsage = "someOtherProperty,myProperty"
disableHeuristic = falseWeitere Informationen zum Format der Datei „ .contextProperties.ini “ finden Sie unter „Einstellungen für Kontexteigenschaften “.
© 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.