QToolBox是否拥有其项目?

时间:2012-02-10 13:14:19

标签: qt

当一个小部件被添加到QToolBox时,小部件的所有权是否会转移到QToolBox?换句话说:它会成为新的父级并在销毁时摧毁小部件吗?

3 个答案:

答案 0 :(得分:4)

如果使用new QWidget(pointer_to_toolbox);或类似的东西构建窗口小部件,工具箱将获取窗口小部件的所有权。

addItem()的文档并未说明所有权,因此我敢打赌,工具箱并未取得传递给addItem()的任何小部件的所有权

答案 1 :(得分: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源代码。我无法在addItem中找到qtoolbox.cpp实施。有关于它的评论,但只有qtoolbox.h中的声明。嗯...

答案 2 :(得分:0)

这实际上取决于代码的组织。您可以设计代码,使其能够重用与qtoolbox关联的对象,您必须更加具体。