• 3797阅读
  • 8回复

qml 与C++交互问题 [复制链接]

上一主题 下一主题
离线suma_alex
 

只看楼主 倒序阅读 楼主  发表于: 2017-03-16
界面使用qml实现,业务逻辑部分使用C++
现在遇到二者交互的问题:界面上的参数如何 和 C++中保持同步?
举个例子:
分辨率:
C++中该参数可取得值为:1920*1080    1024*768
界面上显示的分辨率为1024*768

1.用户更改分辨率为1920*1080;那么如何通知C++该参数同步?
2.C++中该参数被更改为1920*1080;那么界面上如何更新?

类似于分辨率,比较大的项目中参数 数目比较多,如何比较合理方便的管理 这类数据
离线15145093145

只看该作者 1楼 发表于: 2017-03-16
没看懂。。qml 使用布局后,有分辨率的问题吗?
离线suma_alex

只看该作者 2楼 发表于: 2017-03-16
分辨率只是我举的一个例子,也有可能界面上显示的本地IP、本地端口号....
离线15145093145

只看该作者 3楼 发表于: 2017-03-17
这应该是 c++ qml交互的范畴, 你如果仔细看一下就会明白的。
在线toby520

只看该作者 4楼 发表于: 2017-03-17
回 suma_alex 的帖子
suma_alex:分辨率只是我举的一个例子,也有可能界面上显示的本地IP、本地端口号.... (2017-03-16 13:41) 

你需要 参考 http://www.heilqt.com/2017/03/10/QtQuick-C++2/
QtQML多多指教开发社区 http://qtclub.heilqt.com
将QtCoding进行到底
关注移动互联网,关注金融
开发跨平台客户端,服务于金融行业
专业定制界面
群号:312125701   373955953(qml控件定做)
离线never_forget

只看该作者 5楼 发表于: 2017-03-17
Qt 和 QML 是可以进行信号传递的,当C++中知道了分辨率的改变,楼主定义一个信号,发送一下,在QML中监听,就OK了,但是貌似这样你的交互方式要是注册实例到QML,注册类,没用过,楼主也可以试试看,注册实例,然后监听,是可以保持C++和QML交互的,不行,楼主可以过来砍我!
离线suma_alex

只看该作者 6楼 发表于: 2017-03-17
回 toby520 的帖子
toby520:你需要 参考 http://www.heilqt.com/2017/03/10/QtQuick-C++2/ (2017-03-17 09:34) 

仔细研究了版主提供的文档,自己尝试写了个demo,可以解决我的问题
1.qmlRegisterType<>(带参数)此函数可以将一个c++类注册到qml,但是必须在qml中实例化,
   这点和我的项目有点冲突,因为c++类中的数据成员我需要在另一个线程中更改的,如果在qml中实例化,另一个线程如何调用C++类中的成员,也是个问题
2.注册单例
  很明显 此方法比较好的解决了我的问题,定义一个 全局的C++类,
  在一个线程中引用 此全局类对象,更改其数据成员
  在qml中调用此全局类对象的函数,读取其数据成员

感谢版本的帮助,暂时先 这样进行,不知道版主还有没有更好的解决办法
离线suma_alex

只看该作者 7楼 发表于: 2017-03-17
回 never_forget 的帖子
never_forget:Qt 和 QML 是可以进行信号传递的,当C++中知道了分辨率的改变,楼主定义一个信号,发送一下,在QML中监听,就OK了,但是貌似这样你的交互方式要是注册实例到QML,注册类,没用过,楼主也可以试试看,注册实例,然后监听,是可以保持C++和QML交互的,不行,楼主可以过来砍我! (2017-03-17 15:23) 

哈哈 我暂时就是这样进行的,写个demo,测试是OK的
离线suma_alex

只看该作者 8楼 发表于: 2017-03-17
回 toby520 的帖子
toby520:你需要 参考 http://www.heilqt.com/2017/03/10/QtQuick-C++2/ (2017-03-17 09:34) 

刚忘记写了:
注册单例后有一个问题:

类中的枚举无法访问了.....

版本有没有解决办法?
难道要单独写个枚举类注册到qml中吗
快速回复
限100 字节
 
上一个 下一个