我想将一个从C ++到QML的全局变量公开,但是我无法让所有QML文件都可以访问它。
我正在尝试将我的上下文属性添加到QQmlEngine
根上下文,因为根据文档:
QQmlContext * QQmlEngine :: rootContext()const返回引擎的 根上下文。
根上下文由QQmlEngine自动创建。数据即 应该可供所有实例化的QML组件实例使用 引擎应该放在根上下文中。
仅应对组件子集可用的其他数据 应将实例添加到根目录的子上下文中 上下文。
假设此属性应该可用于所有QML文件。我这样做:
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