查看完整版本: [-- QML与C++数据交互问题 --]

QTCN开发网 -> Qt QML开发 -> QML与C++数据交互问题 [打印本页] 登录 -> 注册 -> 回复主题 -> 发表主题

cllssg 2019-09-28 07:31

QML与C++数据交互问题

小弟刚接触QML,遇到了QML与C++的数据交互,向各位高手请教下。
就是在C++进行数值运算,每200ms产生一个结构体数组,实时的让QML在界面进行显示,现在不知道用什么办法实现。
结构体类似
struct Dat
{
double P;
double B;
double E;
}
计算的结构体数组:struct Dat data[15];  所有的数据都放在data[15]里面,
请各位高手能给指导下,谢谢

小韩老师 2019-09-28 08:34
如果是我的话,我的实现思路是封装一个类,该类继承自QQmlPropertyMap,该类定
一个接收到新数据的signal,每次产生新数据时就发送一个信息,在QML中接收并处理。(由于200ms时间间隔挺大的可以处理过来,15个数据结构数据量不大也可以存贮在QML中)。

cllssg 2019-09-28 08:46
小韩老师:如果是我的话,我的实现思路是封装一个类,该类继承自QQmlPropertyMap,该类定
一个接收到新数据的signal,每次产生新数据时就发送一个信息,在QML中接收并处理。(由于200ms时间间隔挺大的可以处理过来,15个数据结构数据量不大也可以存贮在QML中)。 (2019-09-28 08:34) 

我现在纠结的是结构体数组怎么进行传递问题,就是在C++中用什么变量进行传递给QML,毕竟QML不支持结构体类型啊,我本来想用二维数组那,但是弄了半天也不知道咋回事

小韩老师 2019-09-28 09:27
QML和C++数据交互就是通过数据映射过去的,不要想着在QML中操作结构体等指针玩意。你将结构体中的变量名变为属性名,变量值变为属性值,这不就完成了交互,二该类就是交互的中间人(不管哪个版本QT都可以这么干),比如你的结构中的a,就封装为属性a,将a的值设置给该属性,这不就实现了交互。

cllssg 2019-09-28 09:48
小韩老师:QML和C++数据交互就是通过数据映射过去的,不要想着在QML中操作结构体等指针玩意。你将结构体中的变量名变为属性名,变量值变为属性值,这不就完成了交互,二该类就是交互的中间人(不管哪个版本QT都可以这么干),比如你的结构中的a,就封装为属性a,将a的值设置给该属性,这不就 .. (2019-09-28 09:27) 

我倒是明白你的意思,就是把结构体内部的变量作为单一的属性进行注册,然后在QML进行应用。
但是要是结构体比较复杂的话,那就得定义很多的属性,而且结构体数组比较大的话,每个属性得有很多得值。最主要得是结构体数组是实时生成的,就是函数生成返回的就是个结构体数组,要是每个都进行注册那程序就显得太繁琐了

小韩老师 2019-09-28 10:34
1、如果数据量比较大,考虑性能的就需要使用,型视图模式了。

2、如果单单结构体比较复杂,希望懒省事。那就看你的需求了,如果界面只是显示不需要操作数据,你可以将数据组合成字符串直接显示,值需要注册一个属性字符串。如果你需要对每个数据进行编辑操作,感觉单个属性注册也是必要的。
3、由于SLOT和SIGNAL都可以直接在QML中操作,你不想注册,完全可以多定义信号和槽函数,在QML直接调用。

cllssg 2019-09-28 10:44
小韩老师:1、如果数据量比较大,考虑性能的就需要使用,型视图模式了。
2、如果单单结构体比较复杂,希望懒省事。那就看你的需求了,如果界面只是显示不需要操作数据,你可以将数据组合成字符串直接显示,值需要注册一个属性字符串。如果你需要对每个数据进行编辑操作,感觉单个属性注册也 .. (2019-09-28 10:34) 

感谢,我正在琢磨模型视图,看看能不能解决这个问题

angelus 2019-09-29 14:17
我处理比较简单,列表型数据使用qlist<QVarint> 传递到qml  ,简单数据直接传递qvariant或者json

XChinux 2019-09-29 22:13
你的QML只是显示,而且还还不需要实时显示(200毫秒产生一个新数据,QML界面不需要)。
所以你可以核心全放在C++里,QML界面需要什么数据的时候调用C++接口获取相应的数据返回即可。无论如何QML只是显示某一个状态下一部分数据而已。

cllssg 2019-10-06 18:45
感谢各位,已经解决,就是用的qlist<qvarint>进行的数据传递。

nikonice 2019-11-14 09:02
json最方便

xiaohuyang 2019-11-14 09:47
cllssg:感谢各位,已经解决,就是用的qlist<qvarint>进行的数据传递。
 (2019-10-06 18:45) 

不是要少用QVar ?


查看完整版本: [-- QML与C++数据交互问题 --] [-- top --]



Powered by phpwind v8.7 Code ©2003-2011 phpwind
Gzip disabled