このページについて

コンテキストプロパティ

この警告カテゴリは、qmllint によって「[context-properties] 」と表記されます。

コンテキストプロパティへのアクセスが検出されました

何が起きたのか?

コンテキストプロパティへのアクセスが検出されました。

なぜ問題なのか?

QML コードでコンテキストプロパティを使用すると、そのコードを記述した際に想定していた特定のコンテキストに対して、QML コードから依存関係が生じます。コードが使用される他の場所ではコンテキストが異なる可能性があるため、これによりコードの再利用性が制限されます。さらに、この依存関係は宣言されていません。コンテキストをインポートしたり、想定している内容を明示したりすることはありません。 そのため、コードを再利用しようとする人は、再利用先のコンテキストが当該コードにとって十分であるかどうかを判断するのに困難をきたします。

QMLツールはcontextプロパティを利用できません。コンパイラはこのファイルを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.