2012-02-10 21 views
1

當一個小部件被添加到QToolBox中時,小部件的所有權是否會被轉移到QToolBox?用不同的方式表達:當它本身被破壞時它會成爲新的父項並銷燬小部件)?QToolBox是否擁有它的物品?

+0

這很容易檢查。添加項目後,請查看誰是父項目。更重要的是,父母可以是'QToolBox'中的內部小部件。所以你真正想要做的是添加項目,然後迭代QToolBox的後代樹,並檢查你的小部件是否出現。 – 2013-03-19 12:57:03

回答

4

如果使用new QWidget(pointer_to_toolbox);或類似的東西來構造小部件,則工具箱將取得小部件的所有權。

addItem()的文件並沒有說明任何東西的所有權,所以我敢打賭,工具箱中並不需要傳遞給addItem()

0

這真的取決於您的代碼組織。你可以設計你的代碼,使它可以重用與qtoolbox相關的對象,你必須更具體。

+0

這裏沒有關於我的代碼的信息。我需要知道QToolBox的行爲,所以我可以組織我的代碼不泄漏,段錯誤或有對象樹圈。 – pmr 2012-02-10 14:25:03

+0

因爲基於C++的QT與任何OOP定義的對象沒有區別。如果你動態地分配一個對象成員,當這個對象被刪除時(這也取決於你是作爲類成員還是槽聚合)。這也讓你有機會通過價值傳遞它,在這種情況下,問題是QT的花式代碼生成器(特別是它的信號和插槽機制),通過值並不總是與QT的內部設計兼容。 – olafpadme 2012-02-12 15:03:49

+0

恐怕你不明白這個問題。如果從'QObject'派生的東西(稱爲對象O)被說成'擁有一個對象A',那麼A就成爲O的一個子類。一旦調用它的析構函數,O就會刪除它的所有子元素。 Qt在某些東西需要其他東西的所有權時並不完全清楚,我的問題是關於這種特定情況,在哪裏明智地取得某些東西的所有權,但顯然沒有完成。這裏沒有關於'moc'或信號和插槽的信息。 – pmr 2012-02-12 21:19:16

3

從任何部件的所有權有什麼我可以從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中只有它的聲明。嗯....

相關問題