QML与Qt C++ 交互机制探讨与总结
来源:互联网 发布:数据新闻的发展 编辑:程序博客网 时间:2024/05/21 10:17
QML与Qt C++ 交互机制探讨与总结
介绍
QML和 C++对象可以通过,signals,slots和 属性修改进行交互。对于一个C++对象,任何数据都可以通过Qt的 Meta-Object System暴露给QML(何总方法,后面介绍),同时,任何的QML对象数据通过Meta-object system在C++端直接访问。
在实际的项目中很多地方会用到QML与Qt C++交互。在这里总结了若干方法供大家参考,欢迎大家指导和拍砖。
在这里不外乎有三种方法:
1. 把Qt C++中的对象或类型暴露给 QML端,供QML端使用。(官方说法是“嵌入”而非“暴露”,比较文明。- -b)
2. QML中的Signal Handler(相当于Qt C++发送信号给QML端,QML端的Signal Handler进行处理)。
3. 在Qt C++端创建QML对象,既然对象都有了。那你想怎么样它就怎么样它呗。(没用过,看起来也不太实用,不过介绍介绍,有用过的同学留言哈)。
好,我们开始吧~
知识准备
别急,让我们先来看看,一些东西,如果您都知道,可以跳过此节。
QML API有三个主要成员——QDeclarativeEngine,QDeclarativeComponent和QDeclarativeContext。
QDeclarativeEngine提供了QML的运行环境。
QDeclarativeComponent封装了QML Documents。
QDeclarativeContext允许程序使用QML组件显示数据。
QML包含一个非常好用的API——QDeclarativeView。通过它,应用程序可以很方便的把QML组件嵌入到QGraphicsView中。QDeclarativeView主要用于在应用程序开发过程中进行快速原型开发。
暴露Qt C++的对象或类型给QML
创建需要暴露给QML的数据类型
若你想数据元素中的方法可以被QML直接调用有2种方法:
1. 在函数申明前添加 Q_INVOKABLE 宏。
2. 申明成public slots。
QML可以直接访问改数据元素的属性,该属性由QPROPERTY所申明。
具体实现请参考,示例代码。
暴露已存在的Qt C++对象给QML
qml中可以直接使用myObjectExposeByCxProperty对象。
注册Qt C++类类型给QML
另外一种方式是注册类型
QML中这样使用
步骤:
1. 导入import。
2. 创建对象。
3. id直接使用。
QML中的Signal Handler
还是使用上面的那例子,在qml中点击按钮控件,改变其中对象的字符串,这时候在Qt C++中发送一个signal信号给qml端,qml端接收到使用signal handler响应,改变label2的值。具体代码如下。
qml中修改string的值。
Qt C++触发信号
连接signal handler响应
Qt C++中直接调用QML的函数
同样的QML的函数也可以被Qt C++端调用。
所有的QML函数都通过meta-object system暴露Qt C++端,在Qt C++端可以使用QMetaObject::invokeMethod()方法直接调用。下面就是这样的一个例子。
注意:QMetaObject::invokeMethod()方法中的参数Q_RETURN_ARG()和Q_ARG()都被定义为QVariant类型,此类型是QML函数的的参数和返回值的通用数据类型。
- QML与Qt C++ 交互机制探讨与总结
- QML与Qt C++ 交互机制探讨与总结
- QML与Qt C++ 交互机制探讨与总结
- QML与Qt C++ 交互机制探讨与总结
- QML与Qt C++ 交互机制探讨与总结
- QML与Qt C++ 交互机制探讨与总结
- QML, Qt C++混合编程--QML与Qt C++ 交互机制探讨与总结
- Qt与C语言交互探讨
- Qt与Qml交互的小Demo
- QML与C++交互
- QML与c++交互
- QML与C++交互
- QML与C++交互
- QML与c++交互
- QML与C++交互
- QML与C++交互
- qml 与 c++交互
- Qt移动应用开发:QML与C++的交互
- UVa 10494 - If We Were a Child Again
- php上传文件不成功的情况
- rabbitmq
- Linux系统下启动MySQL的命令及相关知识
- 来这些向前辈们学习学习~
- QML与Qt C++ 交互机制探讨与总结
- lazy懒加载(延迟加载)UITableView
- 价格折扣的小数位数显示
- 黑马程序员——多线程
- 具有 SUID/SGID 权限的命令运行状态
- Android测试框架介绍
- Servlet生命周期与工作原理
- 【LeetCode】Add Binary
- MFC 创建不规则窗体