首页| 论坛| 消息

标题:QML与C++数据交互问题
作者:cllssg
日期:2019-09-28 07:31
内容:

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


#1 [小韩老师 09-28 08:34]
如果是我的话,我的实现思路是封装一个类,该类继承自QQmlPropertyMap,该类定
一个接收到新数据的signal,每次产生新数据时就发送一个信息,在QML中接收并处理。(由于200ms时间间隔挺大的可以处理过来,15个数据结构数据量不大也可以存贮在QML中)。
#2 回 小韩老师 的帖子 [cllssg 09-28 08:46]
小韩老师:如果是我的话,我的实现思路是封装一个类,该类继承自QQmlPropertyMap,该类定
一个接收到新数据的signal,每次产生新数据时就发送一个信息,在QML中接收并处理。(由于200ms时间间隔挺大的可以处理过来,15个数据结构数据量不大也可以存贮在QML中)。 (2019-09-28 08:34) 
我现在纠结的是结构体数组怎么进行传递问题,就是在C++中用什么变量进行传递给QML,毕竟QML不支持结构体类型啊,我本来想用二维数组那,但是弄了半天也不知道咋回事
#3 [小韩老师 09-28 09:27]
QML和C++数据交互就是通过数据映射过去的,不要想着在QML中操作结构体等指针玩意。你将结构体中的变量名变为属性名,变量值变为属性值,这不就完成了交互,二该类就是交互的中间人(不管哪个版本QT都可以这么干),比如你的结构中的a,就封装为属性a,将a的值设置给该属性,这不就实现了交互。
#4 回 小韩老师 的帖子 [cllssg 09-28 09:48]
小韩老师:QML和C++数据交互就是通过数据映射过去的,不要想着在QML中操作结构体等指针玩意。你将结构体中的变量名变为属性名,变量值变为属性值,这不就完成了交互,二该类就是交互的中间人(不管哪个版本QT都可以这么干),比如你的结构中的a,就封装为属性a,将a的值设置给该属性,这不就 .. (2019-09-28 09:27) 
我倒是明白你的意思,就是把结构体内部的变量作为单一的属性进行注册,然后在QML进行应用。
但是要是结构体比较复杂的话,那就得定义很多的属性,而且结构体数组比较大的话,每个属性得有很多得值。最主要得是结构体数组是实时生成的,就是函数生成返回的就是个结构体数组,要是每个都进行注册那程序就显得太繁琐了
#5 [小韩老师 09-28 10:34]
1、如果数据量比较大,考虑性能的就需要使用,型视图模式了。
2、如果单单结构体比较复杂,希望懒省事。那就看你的需求了,如果界面只是显示不需要操作数据,你可以将数据组合成字符串直接显示,值需要注册一个属性字符串。如果你需要对每个数据进行编辑操作,感觉单个属性注册也是必要的。
3、由于SLOT和SIGNAL都可以直接在QML中操作,你不想注册,完全可以多定义信号和槽函数,在QML直接调用。

<< 1 2 3 >> (1/3)

回复 发表
主题 版块