簡體   English   中英

對象擁有QObject派生類集合的正確方法是什么?

[英]What is the right way for an object to have a collection of a QObject derived class?

我正在嘗試創建一個類暴露一個QObject派生類的集合(或幾個)(具有自己的qt屬性)qt屬性我可以在qml中使用。

根據http://qt-project.org/doc/qt-5.0/qtcore/qobject.html#no-copy-constructor-or-assignment-operator,qt與復制構造函數不兼容。

所以我使用QList<QObject derived class> (我的第一個想法)我不能通過引用傳遞列表(或者至少我認為這是編譯器錯誤所暗示的)(需要副本)並且很難搞清楚如何添加列表中的項目。

我應該使用QList<QObject derived class *>還是QList<SomeQTSmartPointer<QObject derived class>>或其他什么?

好吧, QList<Derived*>QList<std::unique_ptr<Derived>>都可以。 如果您使用Qt默認垃圾收集器(使用父子樹),您可以使用:

QList<Derived*> list;
list.push_back(new Other(parent, ...));

否則你應該使用第二個:

QList<std::unique_ptr<Derived>> list;
list.push_back(new Other(...));

我應該使用QList<QObject derived class *>還是QList<SomeQTSmartPointer<QObject derived class>>或其他什么?

兩者都很好,但最好通過Qt父/子機制堅持前者。 這將是一般管理它的最Qt'ish方式:

QList<MyClass*> list;
list.append(new MyClass(parent);

您還可以使用Qt智能指針,如QPointer,QScopedPointer或QSharedPointer,如下所示:

QList<QShardPointer<MyClass> > list;
// Being explicit to be more comprehensive, but it is not necessary
list.append(QSharedPointer<MyClass>(new MyClass());

這適用於pre C ++ 11和post。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM