QML全局变量

时间:2013-11-05 17:57:15

标签: c++ qt qml qt5 qtquick2

我想将一个从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

0 个答案:

没有答案