C++ から QML にグローバル変数を公開したいのですが、すべての QML ファイルでアクセスできるようにすることはできません。
QQmlEngine
ドキュメントによると、コンテキスト プロパティをルート コンテキストに追加しようとしています。
QQmlEngine ドキュメント:
QQmlContext * QQmlEngine::rootContext() const エンジンのルート コンテキストを返します。
ルート コンテキストは、QQmlEngine によって自動的に作成されます。エンジンによってインスタンス化されたすべての QML コンポーネント インスタンスで利用できるデータは、ルート コンテキストに配置する必要があります。
コンポーネント インスタンスのサブセットでのみ使用できる追加データは、ルート コンテキストを親とするサブコンテキストに追加する必要があります。
このプロパティは、すべての QML ファイルで利用できるはずです。私はそのようにやっています:
MainWindow.cpp
MainWindow::MainWindow(QObject *parent)
: QObject(parent),
engine(new QQmlEngine(parent)),
window(NULL)
{
// Set global properties
this->setIndependentResolutionScale();
// Load the QML file
QQmlComponent component(this->engine, QUrl("qrc:/qml/MainWindow.qml"));
this->window = qobject_cast<QQuickWindow *>(component.create());
this->engine->setIncubationController(this->window->incubationController());
}
void MainWindow::setIndependentResolutionScale()
{
// In a standard resolution laptop screen->logicalDotsPerInch() is 72
QScreen *screen = qApp->screens().at(0);
qreal u = 72.0/screen->logicalDotsPerInch();
this->engine->rootContext()->setContextProperty("u", u);
}
このプロパティを使用しても問題はありませんがMainWindow.qml
、他の QML ファイルで使用しようとすると、ReferenceError: u is not defined
.
なぜこのエラーが発生するのですか? QQmlEngine
ユニークではないからですか?グローバル変数を作成する別の方法はありますか?
私はQt 5.2を使用しています