首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么QList不是从QObject派生的?

为什么QList不是从QObject派生的?
EN

Stack Overflow用户
提问于 2014-01-22 19:44:23
回答 6查看 1.3K关注 0票数 3

我想在QList周围创建一个QObservableCollection包装器(使用内部QList实现并转发所有调用,同时为更改集合的函数发出某种CollectionsChanged信号),但我发现QList不是从QObject继承的。

我相信你需要继承QObject才能发出Qt信号。所以我的QObeservableCollection需要从QObject继承。

但是QListQVector以及其他Qt集合都不是从QObject继承的,所以我想他们的集合一定有一些缺点或问题。

我发现QSignalSpy同时继承了QObjectQList<QList<QVariant>>,所以也许他们就是看不到继承QObject的理由?

EN

回答 6

Stack Overflow用户

发布于 2014-01-22 19:55:07

有一个非常重要的技术原因:moc不能处理模板,这对于泛型容器类型来说是非常必要的。

票数 5
EN

Stack Overflow用户

发布于 2014-01-22 20:19:18

QList应该是一种值类型(如std::vector),它使用隐式共享,而QObjects必须用作指针,不允许复制

还有其他类反映了这种用法,比如QImage

票数 4
EN

Stack Overflow用户

发布于 2014-01-22 20:46:19

原因很简单,容器就像值一样,你有赋值运算符,你可以复制它们,克隆它们,等等。

QObject%s不能具有此类功能,它们是不可复制的。试着想象一下,当你用连接的插槽和信号创建对象的克隆时会发生什么。这将导致彻底的混乱。克隆对象的子代应该发生什么呢?也应该被克隆吗?

另一件事是模板的使用。类模板是一个QObject,它对于moc工具来说是一个真正问题。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21281990

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档