如何在从c++到QML再到c++的传递过程中避免对象复制
How to avoid objects copying during passing from C++ to QML and again to C++?
我尝试从c++加载QImage到QML。因此,我已经创建了QQuickPaintedItem的子类,其中我使用slot加载我的QImage(转换为QVariant)(这意味着我在这种情况下仅使用QML作为传输)。但是我只有一个问题:我通过值传递QImage,并且我知道我不能使用引用和指针从QML传递参数到c++。
那么,是否有一些技巧可以避免对象在从c++到QML再到c++的传递过程中复制?
这个"技巧"是Qt内置的:像许多其他包含数据的类一样,QImage
使用隐式数据共享AKA copy-on-write/CoW,引用自Qt5文档:
文档中的QImage对象可以按值传递,因为QImage类使用隐式数据共享。
Link提供了更多关于这在Qt上下文中意味着什么的细节,但简而言之,实际的QImage
实例非常小,并且作为值传递非常便宜。它基本上只是一个指向具有引用计数的共享数据的指针。当一个实例被修改时,如果引用计数大于1,它首先被分离(深度复制),但当不修改时,它只是在指针周围复制。
相关文章:
- 是否删除在对象构造过程中创建的对象
- 如何在鼠标挂钩过程中检测拖动
- clang 插件:在编译过程中修改 AST
- Adafruit 羽毛RFM69HCW在使用过程中会冻结,需要硬重置
- 线程过程中的线程同步问题
- MySQL 连接器/C++.尝试在此过程中停止连接到数据库
- C++ 在编译过程中 strtok 函数 Eclipse 说没有在范围内声明?
- 在调用过程中删除 std::函数
- 动态矩阵特征分解过程中的误差
- cmake在构建过程中使用另一个工具检测标志
- 在模板参数推导过程中丢失限定符
- 升压过程中的管道缓冲区大小
- 如何在插入过程中更改插入的值
- 在PostgreSQL函数或过程中使用C++代码
- Vulkan:设备在缓冲区复制过程中丢失
- 如何解决导入dll过程中Viual Studio中的并排配置错误
- C++:如何在对象构造过程中调用初始值设定项列表之外的成员构造函数
- Node中的子节点列表在C++中的BFS遍历过程中丢失
- 复制文件的最佳方式是什么,以便我可以在复制过程中轻松取消复制?
- chrono::duration_cast在比率相乘过程中的问题