QML和c++(Qt)相互传值
来源:互联网 发布:如何培养英语兴趣 知乎 编辑:程序博客网 时间:2024/05/29 18:50
qml的两种加载方式:
#include <QGuiApplication>
#include <QQmlApplicationEngine>
#include<QTextCodec>
#include <QQuickView>
#include <QtQml>
QQuickView *view;
int main(int argc,char *argv[])
{
QTextCodec::setCodecForLocale(QTextCodec::codecForName("UTF-8"));
myapplication app(argc, argv);
view = new QQuickView;
view->setSource(QUrl(QStringLiteral("qrc:/main.qml")));
view->show();
// QQmlApplicationEngine engine;
// engine.load(QUrl(QStringLiteral("qrc:/main.qml")));
QObject::connect(view->engine(), SIGNAL(quit()), view, SLOT(close()));
return app.exec();
}
上面是采用QQuickView的方式(Rectangle加载方式)。这种加载一切正常,启动过程中没有出现白屏现象(此时退出Qt程序需要将QQuickView close掉才行,执行Qt.quit() 会触发QQmlEngine的quit()信号)
QQuickView只是提供一个界面,然后可以在界面添加各种组件,所以显示的时候就是qml加载成功的时候,没成功之前是就是黑的(屏幕原先是什么样还是什么样)。
而QQuickWindow(window)却是为我们提供了一个基于graphical QML scene的窗口,主要是方便scene中的组件(QQuickItems)之间互相interact(交互)。所以在使用的时候,qml还没有加载完毕,scene已经存在,就是我们看到的一片白色。。。
QML和c++(Qt)相互传值
第一种传值过程有两种实现方法
方法1:
1.假设
1.在c++中创建一个Person的对象,
2.在QML中获取并显示数据
3.在c++中改变数据后,显示的数据能进行相应的改变
也就是说我们实际是在c++中new一个对象出来,而把这个对象的数据在QML里面进行显示
2.具体代码
......
qml页面之间传值及传返回值
QML 传值问题
Test1.qml中有个button点击跳转到Test2.qml,代码:
pageStack.push(Qt.resolvedUrl("Test2.qml"),{"test":"aaaaaaaaaaaaaaaaaaaaa"});
然后在Test2.qml中有个属性
property string test: ""
在Test2.qml的Component.onCompleted事件中输出 test 属性时 test属性为空
这是什么原因呢 ?
要怎样才能或得到从Test1.qml中传过来的值?
谢谢回复!!
------解决方案--------------------
Component.onCompleted是构造函数,那时对象刚刚创建,的确是没有赋值
想要第一时间得到这个值,应该在page的onStatusChanged中通过观察status的变化来实现。
- QML和c++(Qt)相互传值
- Qt:QML:JavaScript 和QML 语法错误表
- Qt Quick 和qml介绍
- Qt Quick 和qml介绍
- Qt Quick 和qml介绍
- QML和C++相互调用总结
- Qt QML
- Qt安装和QML HelloWord程序
- Qt和Qml交互,及多线程
- Qt和JavaScript相互调用
- qml 数组操作(qt quick1.1)
- Qt 5学习(二)QML
- 用QML和Qt C++实现翻页效果的研究(1)
- Qt移动应用开发(八):实现跨平台的QML和OpenGL混合渲染
- Qt 学习之路 2(76):QML 和 QtQuick 2
- Qt中设置QML窗体无边框和背景透明
- 下一代 Ubuntu 桌面将基于 Qt 和 QML
- Qt Quick的C++类注册和QWidget添加qml
- spring jpa报错
- VS 2008 解决方案的目录结构设置和管理 [整理]
- HashMap的实现原理
- Git详解之一:Git起步
- mysql中的字符匹配查询
- QML和c++(Qt)相互传值
- Python多线程
- 【Eclipse】让project使用jdk1.8编译
- 获取精确到微秒的系统时间
- 链表的创建(头插法尾插法)与遍历
- Verilog模块的设计流程
- 应用程序未安装:已安装了存在签名冲突的同名数据包。
- Ext JS - up()和down()方法
- 收藏 | 全球大数据7大阵营,你都知道吗?