Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/azure/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
全局变量 我想把一个全局变量从C++暴露到QML,但是我不能让所有的QML文件都能访问。_C++_Qt_Qml_Qt5_Qtquick2 - Fatal编程技术网

全局变量 我想把一个全局变量从C++暴露到QML,但是我不能让所有的QML文件都能访问。

全局变量 我想把一个全局变量从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

我试图将我的context属性添加到
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);
}