[英]How to use QList to keep track of instances of child classes
我有兩個類, Parent
和Child
(后者是從前者派生的),它們都是QObject派生的類。 這些類被實現為樹結構上的節點,從而為每個節點提供特定的功能。 在Parent
類下,有一個信號會在每次觸發時創建一個Child
類型的新對象。 因此,在三個觸發器之后,樹結構將如下所示:
家長
---------兒童1
---------孩子(1)
---------孩子(2)
我將如何使用QList
跟蹤創建的子對象的數量? 我想在索引號后面加上名稱,以使Child (1)
看起來像Child 1
,現在看起來像一個副本。
我已經閱讀了QList
文檔,並且了解了將對象放入列表后如何提取有意義的信息,但這是我找不到答案的部分。
編輯:
說我做了QList<Child*>ListID
,這只是將ListID
初始化為一個指向Parent
類型列表的指針,還是會填充該列表?
有什么建議么?
PS:在開始實施之前,我想知道這一點,因為我想知道我是否以錯誤的方式進行操作。 這就是為什么我沒有要顯示的代碼。 我希望有更多的隨意討論。
裸QObject
本身就是樹節點。 是的,一個QObject
是容器QObject
小號! 因此,您不需要做任何特別的事情,因為它保留了其所有直接子代的列表,並且還提供了一種遞歸獲取所有特定類型或名稱的子代的方法。
要訪問子列表,請使用QObject::children()
。 要僅獲取特定類型的子代,請使用QObject::findChildren()
。
在您的情況下,您可以在需要時調用auto list = findChildren<Child*>({}, Qt::FindDirectChildrenOnly)
來獲取列表。 如果您不希望動態分配任何內存,請直接使用QObject
的內部列表:
for (auto objChild : std::as_const(children()))
if (auto child = qobject_cast<Child*>(objChild)) {
...
}
在C ++-17之前的版本中,請使用qAsConst
代替std::as_const
。
如果確定只有特定類型的對象是子對象,則可以改用static_cast
並節省一點時間:
for (auto objChild : std::as_const(children())) {
auto child = static_cast<Child*>(objChild);
...
}
在
Parent
類下,有一個信號會在每次觸發時創建一個Child
類型的新對象。
想必您是說插槽嗎?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.