1

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を使用しています

4

0 に答える 0