gpt4 book ai didi

c++ - 如何避免在从 C++ 传递到 QML 再传递到 C++ 期间复制对象?

转载 作者:搜寻专家 更新时间:2023-10-31 00:56:29 28 4
gpt4 key购买 nike

我尝试将 QImage 从 C++ 加载到 QML。所以我已经创建了 QQuickPaintedItem 的子类,在其中我使用插槽加载我的 QImage(转换为 QVariant)(这意味着我在这种情况下仅将 QML 用作传输)。但我只有一个问题:我按值传递 QImage,而且我知道我不能使用引用和指针将参数从 QML 传递到 C++。

那么,是否有一些技巧可以避免在从 C++ 到 QML 再到 C++ 的过程中复制对象?

最佳答案

Qt 内置了“技巧”:与许多其他包含数据的类一样,QImage 使用隐式数据共享 AKA 写时复制/CoW,quote from Qt5 docs :

QImage objects can be passed around by value since the QImage class uses implicit data sharing.

文档中的链接提供了有关这在 Qt 上下文中意味着什么的更多详细信息,但简而言之,实际的 QImage 实例非常小且作为值传递时成本低廉。它基本上只是一个指向具有引用计数的共享数据的指针。当一个实例被修改时,如果引用计数大于 1,它首先被分离(进行深拷贝),但当不修改时,它只是围绕一个指针进行复制。

关于c++ - 如何避免在从 C++ 传递到 QML 再传递到 C++ 期间复制对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39457147/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com