簡體   English   中英

如何使用QList跟蹤子類的實例

[英]How to use QList to keep track of instances of child classes

我有兩個類, ParentChild (后者是從前者派生的),它們都是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.

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