问题标签 [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.

0 投票
1 回答
2033 浏览

c++ - 从 QObject 继承时可以使用 QSharedData 吗?

如何在 Qt 中隐藏私有实现(隐式共享):

我的 Employee.h 标头中有以下 Employee.cpp :

但是当我将 EmployeeData 移动到私有部分时,比如 Employee.cpp,我得到:错误:无效使用不完整类型“struct EmployeeData”</p>

但是,如果我将定义更改为此它可以正常工作:

因此,我可以在继承 QObject 的同时使用 QSharedData 吗?

0 投票
2 回答
561 浏览

qt - 有什么方法可以自动生成基于 QSharedData 的结构?

Qt 有一个内置支持,用于通过QSharedData和来创建具有集成引用计数的对象QSharedDataPointer。一切都很好,但是对于每个这样的对象,我需要编写大量代码:QSharedData基于实现类的构造函数和复制构造函数,对象类 itef 以及每个字段的访问器方法。

对于具有 5-10 个字段的简单结构,这需要很多几乎相同的代码。是否有一些方法可以自动生成此类类?也许存在一些生成器,它们采用简短的描述并自动生成具有所有访问器的实现类和对象类?

0 投票
3 回答
849 浏览

c++ - 私有(隐藏)QSharedData

我有一个类,其中包含一些我想对调用者隐藏的数据成员(因为包括其类型的标头会显着增加编译时间,并且它需要使用此类的每个项目都为其包含路径添加额外的路径)。

此类QSharedDataPointer用于存储此数据。这样就可以使用默认的复制构造函数来复制它。

这个类的基本结构是:

是否有任何花哨的技巧可以做到这一点而不在同一个头文件中定义MySharedClassData(继承自)?QSharedData或者还有其他隐藏数据字段的好方法吗?

我已经尝试过前向声明,MySharedClassData但这没有用(尽管事实m_dataprivate)。

我目前唯一能做的解决方案是声明m_data为,QSharedDataPointer<QSharedData>但每次我想访问它时我都需要强制转换数据成员。有更好的解决方案吗?

0 投票
1 回答
3601 浏览

c++ - 我应该将所有数据类实现为 QSharedData 并将其与 QSharedDataPointer 一起使用吗?

我是 Qt 初学者,需要编写一些数据类。QSharedDataPointer像示例(此处)中那样编写所有这些类是否是一种好方法,或者这是否过多的开销(除了它更多的工作之外)?

我的课在性质上非常像下面的Employee课。我将不得不处理数百个实例,而不是一万或数百万。

我使用 QSharedData / QShareDataPointer 的动机是简化手动内存管理并具有通用代码样式。但我仍然不确定我是否监督了一些警告。

示例

0 投票
1 回答
1042 浏览

qt - QImage 写入时复制

QImage基于QSharedDataQimage跟随pimplor copy on write? _ 例如,复制(通过复制或分配)Qimage 会制作像素的深层复制吗?

0 投票
4 回答
2373 浏览

c++ - QSharedData 和继承

我正在尝试在使用QSharedData. 这个想法很简单,会有许多不同的数据类型,每一种都将派生自基本抽象类。我想用它们QSharedData来存储实际数据,但是每个派生类都将存储不同的数据。我现在正在尝试制作最基本的示例,并且遇到了一些麻烦。

假设这些是我的基本纯虚拟类:

现在假设我想创建一个表示单个值的类(作为一个简约的例子)。我cAtomicValue从基值类派生,我还派生一个数据类来保存值:

现在在这个阶段它工作得很好,在调试器中我可以看到正确的指针类型。但是现在我想添加一个设置和获取值的函数,我不明白该怎么做。我们以setter为例。要设置值,我们必须通过类的成员访问value_cAtomicDatadata_成员cAtomicValue。然而,由于data_持有一个基类指针(cAbstractData),我必须以cAtomicData某种方式将它转换为正确的类型()。我试过这样做:

它显然不起作用,因为它调用detach()并尝试复制基类,因为基类是纯虚拟的,所以它不能。然后我尝试投射指针本身:

但我遇到了一个invalid static_cast ...错误。

我该怎么做,我什至是从根本上以正确的方式做的吗?

0 投票
2 回答
348 浏览

c++ - QSharedData 和 operator=

最近我想实现隐式共享功能,就像 Qt 对它的QSharedDataQSharedDataPointer类所做的那样,所以我查看了它们的源代码,并QSharedData找到了以下三行代码:

但是我不明白如何operator=破坏引用计数。

如果我只是没有将其设为私有并将其实现留空,它不会起到同样的作用吗?

即,如果我简单地写了这个:

0 投票
1 回答
173 浏览

c++ - QSharedDataPointer 和 QSharedData 的替代实现

我想知道是否有人在 Qt 的替代库中遇到过像 QSharedDataPointer 和 QSharedData 这样的隐式共享系统,该系统适用于 pimpl 习惯用法?

如果可能的话,我一直在努力避免向我的系统添加额外的依赖项,我只是想知道我的选择可能是什么。

0 投票
1 回答
1188 浏览

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无论如何写时复制都是线程安全的)。

任何有关如何解决此问题的见解将不胜感激!

0 投票
1 回答
249 浏览

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.