QML和c++(Qt)相互传值
2016-09-13 10:22
441 查看
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已经存在,就是我们看到的一片白色。。。
方法1:
1.假设
1.在c++中创建一个Person的对象,
2.在QML中获取并显示数据
3.在c++中改变数据后,显示的数据能进行相应的改变
也就是说我们实际是在c++中new一个对象出来,而把这个对象的数据在QML里面进行显示
2.具体代码
......
qml页面之间传值及传返回值
qml页面之间传值及传返回值
1.使用qml搞移动开发有一段时间了,不过感觉Qt的帮助文档详细度严重不够,比起MSDN差得远。经常遇到问题不得不借助于网络搜索,网上关于qml开发的资料也比较少。问度娘一般是不行的,得问谷歌或360搜索,因为大部分都是英文搜索,在英文搜索方面,360搜索比百度好用。
2.qml页面之间传值及传返回值的问题,大部分搞qml开发的人都会遇到,特别是传返回值,网上找了个遍也没找到,最后还是自己试出来了。
3.题回正传,直接上代码(以StackView管理页面为例)
(1)page1.qml跳转到page2.qml传值
page1.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的变化来实现。
#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页面之间传值及传返回值
1.使用qml搞移动开发有一段时间了,不过感觉Qt的帮助文档详细度严重不够,比起MSDN差得远。经常遇到问题不得不借助于网络搜索,网上关于qml开发的资料也比较少。问度娘一般是不行的,得问谷歌或360搜索,因为大部分都是英文搜索,在英文搜索方面,360搜索比百度好用。
2.qml页面之间传值及传返回值的问题,大部分搞qml开发的人都会遇到,特别是传返回值,网上找了个遍也没找到,最后还是自己试出来了。
3.题回正传,直接上代码(以StackView管理页面为例)
(1)page1.qml跳转到page2.qml传值
page1.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的变化来实现。
相关文章推荐
- Hybrid application using QML and Qt C++
- QML与c++交互学习笔记(八) qt c++直接调用QML中的函数, 直接设置属性
- Qt中关于JavaScript/QML和C++混合编程
- QML与Qt C++ 交互机制探讨与总结
- Qt实例分析——C++定义的类创建为供QML使用的插件
- QML与c++交互学习笔记(八) qt c++直接调用QML中的函数, 直接设置属性
- QTC++ widget中使用QML编写的UI界面
- QML与Qt C++ 交互机制探讨与总结
- QML 与 C++(Qt)通过信号和槽进行交互
- QML笔记整理——在Qt/C++应用中使用QML
- QML与c++交互学习笔记(八) qt c++直接调用QML中的函数, 直接设置属性
- QT c++程序使用qml的两种方法
- QML, Qt C++混合编程--QML与Qt C++ 交互机制探讨与总结
- Qt移动应用开发(六):QML与C++的交互
- qt下qml和c++交互信号槽机制测试
- Qt5 - c++嵌入qml示例
- QML与Qt C++ 交互机制探讨与总结
- QML与c++交互学习笔记(八) qt c++直接调用QML中的函数, 直接设置属性
- Qt实例分析——C++自定义类型的属性在QML的使用
- QML与Qt C++ 交互机制探讨与总结