我想在QList周围创建一个QObservableCollection包装器(使用内部QList实现并转发所有调用,同时为更改集合的函数发出某种CollectionsChanged信号),但我发现QList不是从QObject继承的。
我相信你需要继承QObject才能发出Qt信号。所以我的QObeservableCollection需要从QObject继承。
但是QList和QVector以及其他Qt集合都不是从QObject继承的,所以我想他们的集合一定有一些缺点或问题。
我发现QSignalSpy同时继承了QObject和QList<QList<QVariant>>,所以也许他们就是看不到继承QObject的理由?
发布于 2014-01-22 19:55:07
有一个非常重要的技术原因:moc不能处理模板,这对于泛型容器类型来说是非常必要的。
发布于 2014-01-22 20:19:18
QList应该是一种值类型(如std::vector),它使用隐式共享,而QObjects必须用作指针,不允许复制
还有其他类反映了这种用法,比如QImage
发布于 2014-01-22 20:46:19
原因很简单,容器就像值一样,你有赋值运算符,你可以复制它们,克隆它们,等等。
QObject%s不能具有此类功能,它们是不可复制的。试着想象一下,当你用连接的插槽和信号创建对象的克隆时会发生什么。这将导致彻底的混乱。克隆对象的子代应该发生什么呢?也应该被克隆吗?
另一件事是模板的使用。类模板是一个QObject,它对于moc工具来说是一个真正问题。
https://stackoverflow.com/questions/21281990
复制相似问题