コンテキスト・プロパティ
この警告カテゴリーはqmllintによって[context-properties] 。
コンテキストプロパティへのアクセスの可能性が検出されました
何が起こりましたか?
コンテキストプロパティへのアクセスの可能性が検出されました。
なぜ悪いのですか?
QMLコードの中でコンテキスト・プロパティを使用すると、QMLコードを記述する際に特定のコンテキストに依存することになります。このことはコードの再利用性を制限してしまいます。さらに、依存関係は宣言されません。コンテキストをインポートすることもなければ、何を期待しているのかを表明することもない。そのため、あなたのコードを再利用しようとする人は、そのコードが再利用される場所に、あなたのコードに十分なコンテキストがあるかどうかを見つけることが難しくなります。
コンパイラはこのファイルをC++にコンパイルできません。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にエントリーを追加する。
必須プロパティの使用
異なるコンポーネントで異なる値を持つコンテキスト・プロパティには、required プロパティを使用します。required プロパティでこの警告を修正するには、setContextProperty の代わりにsetInitialProperties メソッドのいずれかを使用します:
- QQuickView::setInitialProperties,
- QQmlComponent::setInitialProperties,
- QQmlApplicationEngine::setInitialProperties,
- QQmlIncubator::setInitialPropertiesまたは
- QQuickWidget::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.