找回密码
 立即注册
收起左侧

关于C++和QML混合编程的问题。

7
回复
7767
查看
[复制链接]
累计签到:3 天
连续签到:1 天
来源: 2016-12-3 18:25:15 显示全部楼层 |阅读模式
10Qter豆
     QML使用C++混编,大概有两种方式。一是将C++类注册为对象,二是将C++类注册为属性。前者在QML中实例化后即可使用,后者可以直接使用。
      现在假设有一个类名为a的C++类的是实例化对象A,有一个类名为b的C++实例化对象B。如果想将类b中方法的参数类型设为类a,有没有什么办法?或者我这个思路一开始都是错误的,QML压根不能这么做。

因为后台早已完成,后台只能返回一个类对象的指针或者一个类对象,所以我想在QML中直接使用该返回对象,不知道行不行?

最佳答案

查看完整内容

自定义的类型还真不一定被qml支持,可以看看文档里面关于qml支持的数据类型,其中大多数是js类型和quick类,或者最基本的继承qobject类。 如果真的需要复杂的数据类型来满足你需求,那么qml就真没办法了
回复

使用道具 举报

尚未签到

2016-12-3 18:25:16 显示全部楼层
adadadda 发表于 2016-12-8 11:00
多谢回复。您推荐的那篇帖子我看了,但是我可能没说清楚我的问题。我注意到您的那篇帖子上信号的参数都是Q ...

自定义的类型还真不一定被qml支持,可以看看文档里面关于qml支持的数据类型,其中大多数是js类型和quick类,或者最基本的继承qobject类。

如果真的需要复杂的数据类型来满足你需求,那么qml就真没办法了
回复

使用道具 举报

累计签到:3 天
连续签到:1 天
2016-12-3 20:09:43 显示全部楼层
现在我也有解决思路,但是不是特别放心这么做。我的想法是使用reinterpret_cast<int>函数,将指针转化为int型,使用的时候在转换回去。在我有限的测试中完全没有任何问题,但是我不知道在后面的跨平台上有没有问题,还有就是当内存很大时产生的地址会不会超过了int型的上限,从而溢出导致运行出错。求大神讲解。
回复

使用道具 举报

尚未签到

2016-12-5 23:56:45 显示全部楼层
不懂为什么不用信号槽机制,这个是qt相对于别的语言的一大优势
回复

使用道具 举报

累计签到:3 天
连续签到:1 天
2016-12-6 15:12:31 显示全部楼层
本帖最后由 adadadda 于 2016-12-6 15:49 编辑
Joey_Chan 发表于 2016-12-5 23:56
不懂为什么不用信号槽机制,这个是qt相对于别的语言的一大优势

我就是不知道怎么用啊,因为我不会用自定义数据的类做参数,怎么都折腾不出来。还有就是你说的使用信号槽机制是指C++和QML交互中的使用么?还是指不用QML,纯粹只用C++来编写,使用信号槽机制?
回复

使用道具 举报

尚未签到

2016-12-7 01:48:45 显示全部楼层
C++ 和 QML 之间可以用信号槽的,我在这写过教程,http://www.qter.org/forum.php?mod=viewthread&tid=1208
回复

使用道具 举报

累计签到:3 天
连续签到:1 天
2016-12-8 11:00:42 显示全部楼层
本帖最后由 adadadda 于 2016-12-8 11:03 编辑
Joey_Chan 发表于 2016-12-7 01:48
C++ 和 QML 之间可以用信号槽的,我在这写过教程,http://www.qter.org/forum.php?mod=viewthread&tid=1208 ...

多谢回复。您推荐的那篇帖子我看了,但是我可能没说清楚我的问题。我注意到您的那篇帖子上信号的参数都是QML或者Qt支持的类型,而不是使用的自定义类型。我的问题是,如果我要使用自定义的类作为参数类型(不是枚举),我该如何处理?用Qt内置的类型做参数写信号和槽的参数我已经实现了,我想取类的地址,再将其转化为int类型,就是因为Qt支持int类型,但是有一个隐患:当内存太大时,内存地址转换成int类型会不会溢出int类型所能表示的最大值。事实上,我也在反思我的框架设计得对不对,我想到最后,用一种类似于句柄的方式将前台和后台的数据联系起来,这样应该是合理的,但需要进一步研究。
回复

使用道具 举报

累计签到:3 天
连续签到:1 天
2016-12-9 09:54:53 显示全部楼层
Joey_Chan 发表于 2016-12-9 01:06
自定义的类型还真不一定被qml支持,可以看看文档里面关于qml支持的数据类型,其中大多数是js类型和quick ...

我想了想,如果QML支持自定义的数据类型,那才真是不“安全”,因为每一个类的内部设计不同,其参数的储存方式必然也有诸多的不同,这会带来极大的不确定性,比如有的数据在堆上,有的数据在栈上,这样做可能真不安全。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

公告
可以关注我们的微信公众号yafeilinux_friends获取最新动态,或者加入QQ会员群进行交流:190741849、186601429(已满) 我知道了