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

QML 与C++交互问题

2
回复
6762
查看
[复制链接]
累计签到:2 天
连续签到:1 天
来源: 2017-3-20 09:28:17 显示全部楼层 |阅读模式
8Qter豆
qml做界面,C++做逻辑这是一个很好的开发模式,我在处理二者之间交互时遇到一个问题:
1.如果将C++类注册到QML,那么便需要在qml中对此类进行实例化;
   问题是C++类中的数据成员需要在另一个线程中更改,qml-UI中来显示,
   那么qml中实例化的c++类,如何在另一个线程中调用?
  例如:类A有一个数据成员color,
            qml实例化类A, A{color : "blue"}
            线程data修改类A中的color,并在qml中显示实现
2.如果注册C++单例,可很好的解决以上问题,
   main函数里建一个类A的对象:A   dataA
   将dataA注册单例到qml,
   qml可以与C++进行通信的单例 可以监听该单例的任何信号
    可以在任何基于该程序的子qml里面使用该单例的函数
    该单例的函数必须为槽函数 或者方法前加上Q_INVOKABLE进行修饰

   但是此办法无法再qml中访问C++类中的枚举.....

有没有一种方法,可以二者兼顾呢  既可以实现数据交互的问题,又可以访问类中的枚举等....

最佳答案

查看完整内容

你可以这样试试,在注册到qml中的c++类中实例化一个线程类,通过这个注册到qml中的类来启动线程,线程把数据传给c++类,然后c++类再传给qml
回复

使用道具 举报

累计签到:10 天
连续签到:1 天
2017-3-20 09:28:18 显示全部楼层
你可以这样试试,在注册到qml中的c++类中实例化一个线程类,通过这个注册到qml中的类来启动线程,线程把数据传给c++类,然后c++类再传给qml
回复

使用道具 举报

累计签到:2 天
连续签到:1 天
2017-3-29 13:42:50 显示全部楼层
Qters 发表于 2017-3-28 22:40
你可以这样试试,在注册到qml中的c++类中实例化一个线程类,通过这个注册到qml中的类来启动线程,线程把数 ...

我实现的和你说的  差不多;已经解决了 谢谢
回复

使用道具 举报

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

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