Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/137.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从c++;?_C++_Qt_Qml - Fatal编程技术网

C++ qml从c++;?

C++ qml从c++;?,c++,qt,qml,C++,Qt,Qml,我正在尝试为我的android apk设置applicationwindow{}大小,因此我希望从cpp文件中读取值: main.cpp: int main(int argc, char *argv[]) { QGuiApplication app(argc, argv); QScreen *screen = QApplication::screens().at(0); QVariant sz_width = screen->availableSize().wid

我正在尝试为我的android apk设置applicationwindow{}大小,因此我希望从cpp文件中读取值:

main.cpp:

int main(int argc, char *argv[])
{
    QGuiApplication app(argc, argv);

    QScreen *screen = QApplication::screens().at(0);
    QVariant sz_width = screen->availableSize().width();
    QVariant sz_height = screen->availableSize().height();

    QQmlApplicationEngine engine;
    engine.load(QUrl(QStringLiteral("qrc:/main.qml")));

    return app.exec();
}
然后从qml文件读取它(main.qml):

这是为了以后在qml中方便地处理所有对象大小,因此,例如Basicali,我使用mainWindow的字体大小*0.5,这样我就可以为每个应用程序分辨率设置适当的字体大小,但它只有在我真正设置变量宽度和高度时才起作用

也许这个解决方案是一个但“病态的”,但我想这样做,如果你能帮助我正确的语法


谢谢

< P>快速使C++值在QML中可见,可以将它们设置为:

<>这个变量在QML中可以引用的名称(“屏幕宽度”和“屏幕高度”)(如果您愿意,这些变量也可以与C++变量名匹配)。
QSize
类型也是,因此您可以将大小设置为一个变量

engine.rootContext()->setContextProperty(“屏幕大小”,屏幕->可用大小())

在这种情况下,您要查找的信息在QML中已经可用。。。检查连接的对象以及对象/属性以获得可用屏幕的列表

增加:

因为链接文档没有直接提到它,所以应该注意,以这种方式设置的上下文属性变量没有更改通知器信号。因此,与其他“可绑定”属性不同,它们不会在QML中自动更新。让QML自动更新该值的唯一方法是再次设置上下文属性(或者创建一些QML可以连接的信号,并使其重新读取该值)

我找不到Qt文档中提到的确切位置,但该页面提供了一个(微妙的)线索:

通过调用QQmlContext::setContextProperty()定义和更新上下文属性


<> >快速地将QC++值显示在QML中,可以将它们设置为:

<>这个变量在QML中可以引用的名称(“屏幕宽度”和“屏幕高度”)(如果您愿意,这些变量也可以与C++变量名匹配)。
QSize
类型也是,因此您可以将大小设置为一个变量

engine.rootContext()->setContextProperty(“屏幕大小”,屏幕->可用大小())

在这种情况下,您要查找的信息在QML中已经可用。。。检查连接的对象以及对象/属性以获得可用屏幕的列表

增加:

因为链接文档没有直接提到它,所以应该注意,以这种方式设置的上下文属性变量没有更改通知器信号。因此,与其他“可绑定”属性不同,它们不会在QML中自动更新。让QML自动更新该值的唯一方法是再次设置上下文属性(或者创建一些QML可以连接的信号,并使其重新读取该值)

我找不到Qt文档中提到的确切位置,但该页面提供了一个(微妙的)线索:

通过调用QQmlContext::setContextProperty()定义和更新上下文属性


如果你使用QML,不要在C++中做GUI,它不是必须的,也是反模式的。C++可以简单地设置<代码>可见性:窗口。全屏你不提供所有的代码。你不实际在MIN中设置值。在QML中是可见的。如果你使用QML,不要在C++中做GUI,它不是必须的,也是反模式。在QML中,您可以简单地设置可见性:Window.FullScreen
您不提供所有的代码,也就是说,您实际上没有将main.cpp中的值设置为在QML中可见。
ApplicationWindow {
    id: mainWindow
    visible: true
    width: sz_width
    height: sz_height 
}
QQmlApplicationEngine engine;
engine.rootContext()->setContextProperty("screenWidth", sz_width);
engine.rootContext()->setContextProperty("screenHeight", sz_height);
engine.load(QUrl(QStringLiteral("qrc:/main.qml")));