|
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
|