1

我想从 C++ 向 QML 公开一个全局变量,但我无法让所有 QML 文件都可以访问它。

我正在尝试将我的上下文属性添加到QQmlEngine根上下文,因为根据文档:

QQmlEngine 文档:

QQmlContext * QQmlEngine::rootContext() const 返回引擎的根上下文。

根上下文由 QQmlEngine 自动创建。应该对引擎实例化的所有 QML 组件实例可用的数据应该放在根上下文中。

应该只对组件实例的子集可用的附加数据应该添加到以根上下文为父的子上下文中。

假设该属性应可用于所有 QML 文件。我正在这样做:

主窗口.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