问题标签 [qshareddata]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - 从 QObject 继承时可以使用 QSharedData 吗?
如何在 Qt 中隐藏私有实现(隐式共享):
我的 Employee.h 标头中有以下 Employee.cpp :
但是当我将 EmployeeData 移动到私有部分时,比如 Employee.cpp,我得到:错误:无效使用不完整类型“struct EmployeeData”</p>
但是,如果我将定义更改为此它可以正常工作:
因此,我可以在继承 QObject 的同时使用 QSharedData 吗?
qt - 有什么方法可以自动生成基于 QSharedData 的结构?
Qt 有一个内置支持,用于通过QSharedData
和来创建具有集成引用计数的对象QSharedDataPointer
。一切都很好,但是对于每个这样的对象,我需要编写大量代码:QSharedData
基于实现类的构造函数和复制构造函数,对象类 itef 以及每个字段的访问器方法。
对于具有 5-10 个字段的简单结构,这需要很多几乎相同的代码。是否有一些方法可以自动生成此类类?也许存在一些生成器,它们采用简短的描述并自动生成具有所有访问器的实现类和对象类?
c++ - 私有(隐藏)QSharedData
我有一个类,其中包含一些我想对调用者隐藏的数据成员(因为包括其类型的标头会显着增加编译时间,并且它需要使用此类的每个项目都为其包含路径添加额外的路径)。
此类QSharedDataPointer
用于存储此数据。这样就可以使用默认的复制构造函数来复制它。
这个类的基本结构是:
是否有任何花哨的技巧可以做到这一点而不在同一个头文件中定义MySharedClassData
(继承自)?QSharedData
或者还有其他隐藏数据字段的好方法吗?
我已经尝试过前向声明,MySharedClassData
但这没有用(尽管事实m_data
是private
)。
我目前唯一能做的解决方案是声明m_data
为,QSharedDataPointer<QSharedData>
但每次我想访问它时我都需要强制转换数据成员。有更好的解决方案吗?
qt - QImage 写入时复制
是QImage
基于QSharedData
?Qimage
跟随pimpl
or copy on write
? _ 例如,复制(通过复制或分配)Qimage 会制作像素的深层复制吗?
c++ - QSharedData 和继承
我正在尝试在使用QSharedData
. 这个想法很简单,会有许多不同的数据类型,每一种都将派生自基本抽象类。我想用它们QSharedData
来存储实际数据,但是每个派生类都将存储不同的数据。我现在正在尝试制作最基本的示例,并且遇到了一些麻烦。
假设这些是我的基本纯虚拟类:
现在假设我想创建一个表示单个值的类(作为一个简约的例子)。我cAtomicValue
从基值类派生,我还派生一个数据类来保存值:
现在在这个阶段它工作得很好,在调试器中我可以看到正确的指针类型。但是现在我想添加一个设置和获取值的函数,我不明白该怎么做。我们以setter为例。要设置值,我们必须通过类的成员访问value_
类cAtomicData
的data_
成员cAtomicValue
。然而,由于data_
持有一个基类指针(cAbstractData
),我必须以cAtomicData
某种方式将它转换为正确的类型()。我试过这样做:
它显然不起作用,因为它调用detach()
并尝试复制基类,因为基类是纯虚拟的,所以它不能。然后我尝试投射指针本身:
但我遇到了一个invalid static_cast ...
错误。
我该怎么做,我什至是从根本上以正确的方式做的吗?
c++ - QSharedData 和 operator=
最近我想实现隐式共享功能,就像 Qt 对它的QSharedData
和QSharedDataPointer
类所做的那样,所以我查看了它们的源代码,并QSharedData
找到了以下三行代码:
但是我不明白如何operator=
破坏引用计数。
如果我只是没有将其设为私有并将其实现留空,它不会起到同样的作用吗?
即,如果我简单地写了这个:
c++ - QSharedDataPointer 和 QSharedData 的替代实现
我想知道是否有人在 Qt 的替代库中遇到过像 QSharedDataPointer 和 QSharedData 这样的隐式共享系统,该系统适用于 pimpl 习惯用法?
如果可能的话,我一直在努力避免向我的系统添加额外的依赖项,我只是想知道我的选择可能是什么。
c++ - QSharedData 崩溃
我在我的 Qt 5.2.0 应用程序中有一个不常见但相当一致的崩溃,我有一个时间诊断,但相信与QSharedData
. 该应用程序是高度多线程的,这可能是问题的一部分。
有问题的课程在这里:
崩溃发生在这里,将 Route 插入QMap
:
其中 m_lastRouteMap 是一个QMap<quint16, Route>
.
堆栈跟踪如下所示:
所以在 #5 我们正在做 QMap::insert,在 #4 创建一个副本(通过 Route "=" 运算符)。在#3,有问题的 Qt 代码如下所示:
QDateTime
我们正在为其中一个(实际上是私有QTimeZone
成员)在 dtor 中点击“删除旧”并进行分段故障。
我的ezspSendUnicast()
方法在崩溃之前可以正常运行数十万次迭代。我不认为我在泄漏内存(根据 valgrind)。我相信我传递给 ezspSendUnicast() 的 Route 对象受到了适当的互斥保护,但我可能错过了一些东西(但我认为QSharedData
无论如何写时复制都是线程安全的)。
任何有关如何解决此问题的见解将不胜感激!
c++ - Is 'implicit sharing' heritable from Qt classes?
If I create a subclass of an implicitly shared Qt class (e.g., QList), will my subclass be implicitly shared as well?
I read the brief introduction to implicit sharing located in the QtCore5.3 documentation, but I didn't see any mention of heritability.
My purpose in asking is to try to write more efficient code when deciding which arguments to pass and how to pass them.