全局变量 我想把一个全局变量从C++暴露到QML,但是我不能让所有的QML文件都能访问。
我试图将我的context属性添加到全局变量 我想把一个全局变量从C++暴露到QML,但是我不能让所有的QML文件都能访问。,c++,qt,qml,qt5,qtquick2,C++,Qt,Qml,Qt5,Qtquick2,我试图将我的context属性添加到QQmlEngine根上下文,因为根据文档: QQmlEngine文档: QQmlContext*QQmlEngine::rootContext()常量返回引擎的 根上下文 根上下文由QQmlEngine自动创建。数据表明 应可用于由 引擎应该放在根上下文中 应仅对组件子集可用的附加数据 实例应添加到根的子上下文中 上下文 假定此属性应可用于所有QML文件。我是这样做的: MainWindow.cpp MainWindow::MainWindow(QObjec
QQmlEngine
根上下文,因为根据文档:
QQmlEngine文档:
QQmlContext*QQmlEngine::rootContext()常量返回引擎的
根上下文
根上下文由QQmlEngine自动创建。数据表明
应可用于由
引擎应该放在根上下文中
应仅对组件子集可用的附加数据
实例应添加到根的子上下文中
上下文
假定此属性应可用于所有QML文件。我是这样做的:
MainWindow.cpp
MainWindow::MainWindow(QObject*parent)
:QObject(父对象),
发动机(新QQML发动机(主发动机)),
窗口(空)
{
//设置全局属性
此->设置独立的解决方案缩放();
//加载QML文件
QQmlComponent组件(这个->引擎,qrl(“qrc:/qml/MainWindow.qml”);
这个->窗口=qobject_cast(component.create());
此->引擎->设置孵化器控制器(此->窗口->孵化器控制器());
}
void主窗口::setIndependentResolutionScale()
{
//在标准分辨率的笔记本电脑屏幕中->logicalDotsPerInch()为72
QScreen*screen=qApp->screens().at(0);
qreal u=72.0/屏幕->逻辑逻辑逻辑逻辑逻辑逻辑逻辑逻辑逻辑逻辑逻辑逻辑逻辑逻辑逻辑逻辑逻辑逻辑逻辑逻辑逻辑逻辑逻辑逻辑逻辑逻辑逻辑逻辑逻辑逻辑逻辑逻辑逻辑逻辑逻辑逻辑逻辑逻辑逻辑逻辑逻辑逻辑逻辑逻辑逻辑逻辑逻辑逻辑逻辑逻辑逻辑逻辑逻辑逻辑逻辑;
此->引擎->根上下文()->setContextProperty(“u”,u);
}
如果我在main window.qml
中使用此属性,我不会遇到问题,但是如果我尝试在其他qml文件中使用它,我会得到一个ReferenceError:u未定义
为什么会出现这种错误?是因为QQmlEngine
不是唯一的吗?是否有其他方法创建全局变量
我使用的是Qt 5.2是否确实在显示窗口之前添加了上下文属性?是的,该属性在该窗口中有效,但在项目的其他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);
}