On this page

Context properties

This warning category is spelled [context-properties] by qmllint.

Potential context property access detected

What happened?

A potential context property access was detected.

Why is this bad?

By using context properties in your QML code, you create a dependency from your QML code to the specific context you have in mind when writing it. This limits reusability of your code since the context may be different in other places where it might be used. Furthermore, the dependency is not declared. You never import the context or otherwise state what you expect. Therefore, anyone trying to reuse your code will have difficulties finding out whether the place where it is reused has a context sufficient for your code.

QML tooling can't use the context property: the compiler can't compile this file to C++ and qmllint as well as QML Language Server can't provide useful warnings on that file.

Example

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

To fix this warning, you can:

  • Make the property required.
  • Use a singleton.
  • Add an entry to .contextProperties.ini.

Using a required property

Use required properties for context properties that have different values in different components. To fix this warning with a required property, use one of the setInitialProperties methods instead of setContextProperty:

Also define the required property 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)
}

See also Exposing State from C++ to QML.

Using a singleton

Use singletons for context properties that have the same value in all components. To fix this warning with a singleton, remove the setContextProperty call, define a singleton and replace the context property usage with the singleton property.

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

See also Exposing State from C++ to QML.

Adding an entry to .contextProperties.ini

If you can't replace the context property, create a .contextProperties.ini file in your project source directory if there is none, and write the following content:

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

To silence this warning if the .contextProperties.ini file already exists, append the context property name to the already existing lists:

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

See also Context property settings for more information on the .contextProperties.ini format.

© 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.