이 페이지에서

컨텍스트 속성

이 경고 카테고리의 철자는 [context-properties] 입니다.

잠재적인 컨텍스트 속성 액세스가 감지되었습니다.

무슨 일이 일어났나요?

잠재적인 컨텍스트 속성 액세스가 감지되었습니다.

이것이 왜 나쁜가요?

QML 코드에서 컨텍스트 속성을 사용하면 QML 코드를 작성할 때 염두에 둔 특정 컨텍스트에 대한 종속성을 만들 수 있습니다. 이렇게 하면 코드가 사용되는 다른 곳에서는 컨텍스트가 다를 수 있으므로 코드의 재사용성이 제한됩니다. 또한 종속성은 선언되지 않습니다. 컨텍스트를 가져오거나 예상되는 내용을 명시하지 않습니다. 따라서 코드를 재사용하려는 사람은 코드를 재사용하는 곳에서 코드에 충분한 컨텍스트가 있는지 알아내는 데 어려움을 겪게 됩니다.

컴파일러는 이 파일을 C++로 컴파일할 수 없고, qmllint는 물론이고 QML Language Server 는 해당 파일에 대한 유용한 경고를 제공할 수 없습니다.

예제

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

이 경고를 수정하려면 다음과 같이 하면 됩니다:

  • 속성을 필수로 설정합니다.
  • 싱글톤을 사용합니다.
  • .contextProperties.ini 에 항목을 추가합니다.

필수 속성 사용

컴포넌트마다 다른 값을 갖는 컨텍스트 속성에 필수 속성을 사용합니다. 필수 속성으로 이 경고를 수정하려면 setContextProperty 대신 setInitialProperties 메서드 중 하나를 사용하세요:

또한 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)
}

C++에서 QML로 상태 노출도 참조하세요.

싱글톤 사용

모든 컴포넌트에서 동일한 값을 갖는 컨텍스트 프로퍼티에는 싱글톤을 사용합니다. 싱글톤으로 이 경고를 해결하려면 setContextProperty 호출을 제거하고 싱글톤을 정의한 다음 컨텍스트 속성 사용법을 싱글톤 속성으로 바꾸세요.

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

C++에서 QML로 상태 노출하기를 참조하세요.

.contextProperties.ini에 항목 추가하기

컨텍스트 속성을 바꿀 수 없는 경우 프로젝트 소스 디렉터리에 .contextProperties.ini 파일이 없는 경우 이 파일을 만들고 다음 내용을 작성합니다:

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

.contextProperties.ini 파일이 이미 있는 경우 이 경고를 무효화하려면 이미 존재하는 목록에 컨텍스트 속성 이름을 추가합니다:

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

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