1

在使用 Qt 容器工作了一段时间并切换回 c++ stl 之后,我发现我对 Qt 容器更加满意。有时写 stl 似乎我喜欢以非常冗长的方式解决 rebus。

所以我只是想知道在一些非 QObjects 派生中使用 Qt 容器实例是否有一些副作用

4

4 回答 4

2

好吧,看看你想要拥有的不同类并检查是否有任何依赖关系。例如,QList不依赖于任何特定的 Qt 对象,Q_OBJECT据我所知不是一个,应该很好。此处列出的所有其他容器类可能也是如此。

不过,您必须关心的是许可。由于这是在非常具体的规则下可用的代码,例如,您不能简单地获取这些类并在您的商业应用程序中使用它们。- 编辑:当然,只要你动态地链接它们,你就可以。我不是说“不可能”,而是强调“简单”。

于 2013-09-26T15:49:39.427 回答
2

Qt 容器可以毫无问题地与“常规”对象一起使用;不过,请记住,它们不会利用 STL 容器使用的某些 C++ 特性,因此它们可能会对您的类提出额外的要求。

例如,QVector(以及其他 Qt 容器)需要一个默认构造函数,并且在添加元素时,它会执行默认构造 + 赋值,而 STL 使用placement new 仅使用复制构造函数;此外,从 C++11 开始,STL 容器支持移动语义,而目前 Qt 容器只是复制周围的对象。

对于许多 Qt 对象来说,这些都不是问题,因为“大”Qt 对象通常具有“默认”无效状态并使用隐式共享语义(因此默认构造、复制构造函数和赋值通常很便宜),但如果您的对象具有昂贵的副本(可能来自嵌入具有“完整副本”语义的 STL 容器)。

此外,如果您打算以某种方式分发您的程序,您应该考虑是否值得为容器类引入像 Qt 这样非常重的依赖项。

于 2013-09-26T15:51:31.167 回答
1

如果你做了正确的包含,你应该能够使用它们!

于 2013-09-26T15:44:54.270 回答
1

Qt 容器与 QObject 功能完全无关。Qt 本身使用了大量非 QObject 派生类的容器——QStringList这是一个常见的例子。Qt 本身也在非 QObject 派生类的方法中使用容器。

于 2013-09-26T17:39:50.510 回答