當一個小部件被添加到QToolBox中時,小部件的所有權是否會被轉移到QToolBox?用不同的方式表達:當它本身被破壞時它會成爲新的父項並銷燬小部件)?QToolBox是否擁有它的物品?
回答
如果使用new QWidget(pointer_to_toolbox);
或類似的東西來構造小部件,則工具箱將取得小部件的所有權。
的addItem()的文件並沒有說明任何東西的所有權,所以我敢打賭,工具箱中並不需要傳遞給addItem()
這真的取決於您的代碼組織。你可以設計你的代碼,使它可以重用與qtoolbox相關的對象,你必須更具體。
這裏沒有關於我的代碼的信息。我需要知道QToolBox的行爲,所以我可以組織我的代碼不泄漏,段錯誤或有對象樹圈。 – pmr 2012-02-10 14:25:03
因爲基於C++的QT與任何OOP定義的對象沒有區別。如果你動態地分配一個對象成員,當這個對象被刪除時(這也取決於你是作爲類成員還是槽聚合)。這也讓你有機會通過價值傳遞它,在這種情況下,問題是QT的花式代碼生成器(特別是它的信號和插槽機制),通過值並不總是與QT的內部設計兼容。 – olafpadme 2012-02-12 15:03:49
恐怕你不明白這個問題。如果從'QObject'派生的東西(稱爲對象O)被說成'擁有一個對象A',那麼A就成爲O的一個子類。一旦調用它的析構函數,O就會刪除它的所有子元素。 Qt在某些東西需要其他東西的所有權時並不完全清楚,我的問題是關於這種特定情況,在哪裏明智地取得某些東西的所有權,但顯然沒有完成。這裏沒有關於'moc'或信號和插槽的信息。 – pmr 2012-02-12 21:19:16
從任何部件的所有權有什麼我可以從Qt的源代碼工具箱收集不承擔該項目的所有權。下面是從SRC/GUI/qtoolbox.cpp insertItem
功能的一個片段:
int QToolBox::insertItem(int index, QWidget *widget, const QIcon &icon, const QString &text)
{
if (!widget)
return -1;
Q_D(QToolBox);
connect(widget, SIGNAL(destroyed(QObject*)), this,SLOT(_q_widgetDestroyed(QObject*)));
QToolBoxPrivate::Page c;
c.widget = widget;
...
}
正如人們可以從代碼看到QToolBox
一個指針分配給widget
參數到它自己的私有變量。當小部件被銷燬時,通知QToolBox
。
P.S.我已經從git中檢出了qt源碼。並且我在qtoolbox.cpp
中找不到addItem
實施。有關於它的評論,但在qtoolbox.h
中只有它的聲明。嗯....
- 1. 購買物品後失敗(已擁有)消費該物品後
- 2. 列出庫存日常物品,當您擁有的是貨物的移動時
- 3. 收集物品知道收集它是否包含 - 這是否有味道?
- 4. 檢查購物車中是否有缺貨物品 - WooCommerce
- 5. 是否有一個用於查找物品的集合,不僅是按鍵,還有物品的屬性?
- 6. 我們如何從Google Play購買已經擁有的物品?
- 7. 誰應擁有一件物品的國家價值?
- 8. 隱藏物品是否已發佈?
- 9. 如何檢查物品是否熱賣
- 10. 檢查購物車的物品是否具有相同的屬性
- 11. 是否有控制自動調整大小物品的內部
- 12. 是否有產品和購物車的軌道寶石?
- 13. 聚合物中是否有「window.onload」的替代品?
- 14. In App Purchase如何檢查購買的物品是否有
- 15. 是否可以通過物品更改物品中父母/孩子的順序?
- 16. 是否可以說Getter是實例變量的所有者?或誰擁有它?
- 17. 有關gdb的細節是什麼,它是否擁有一個線程?
- 18. jquery:我如何知道我是否擁有它?
- 19. 是否有理由擁有多個reactiveValues()?
- 20. 是否有意義擁有多個NSPersistentStoreCoordinators?
- 21. 有多個按鈕GUI店,裝備物品,購買物品,並檢查是否已經有項目
- 22. 通知7:根據具體物品是否在庫存中提取物品
- 23. 是否有可能使用librarycontainer直接放置物品
- 24. 如何使用Hibernate查找購物車中是否有商品?
- 25. 檢查購物車是否有任何分組產品
- 26. 檢查Magento購物車是否有特定AttributeSetName產品
- 27. 選擇當前用戶擁有的所有商品,如果商品不是
- 28. 有多少物品?
- 29. 聚合物:dom-repeat物品 - 是否有可能洗牌重複項目。
- 30. Woocommerce類別是否有可能刪除,如果它有產品?
這很容易檢查。添加項目後,請查看誰是父項目。更重要的是,父母可以是'QToolBox'中的內部小部件。所以你真正想要做的是添加項目,然後迭代QToolBox的後代樹,並檢查你的小部件是否出現。 – 2013-03-19 12:57:03