【问题标题】:qt 4.7 removeChild() and memoryqt 4.7 removeChild() 和内存
【发布时间】:2011-07-27 12:26:03
【问题描述】:

我正在编写一个 c++ qt 应用程序。在一部分中,我正在创建一个 QTreeWidget。用户可以在该树中创建和删除条目。 因此,当用户创建一个项目时,他将调用一个函数,然后该函数本身会调用:

QTreeWidgetItem* newItem = new QTreeWidgetItem();

当用户稍后决定删除该条目时,他会调用一个函数,然后该函数本身会调用:

QTreeWidgetItem* curItem = _ui->qTreeWidget->currentItem();
QTreeWidgetItem* parent = curItem->parent();
parent->removeChild(curItem);

现在为我抹去的问题是:这个项目占用的内存呢? Qt 4.7 文档对 removeChild 的描述如下:

void QTreeWidgetItem::removeChild (QTreeWidgetItem * child) 删除由 child 指示的给定项目。被移除的项目不会被删除。

那么我如何删除一个孩子?

提前非常感谢! 唐尼

【问题讨论】:

  • @Donny:我注意到你是 SO (StackOverflow) 的新手,所以首先,欢迎来到这个网站!你看过faq吗?我只是问,因为我注意到您没有对您的问题的任何答案投赞成票。如果您发现一个有用的答案,您应该点击答案左侧的小三角形;这将奖励发布者“声誉”,并表明答案是有帮助的。如果您已经熟悉 SO 习俗并且没有故意投票,请忽略此评论 :)!无论如何,玩得开心!

标签: c++ qt memory qtreewidgetitem


【解决方案1】:

怎么样

delete curItem;

?

根据documentation,析构函数将从包含它的树中删除该项目,所以我认为您甚至不需要事先执行removeChild

【讨论】:

    【解决方案2】:

    你通常会在正确的时间删除你的对象:

    delete curItem;
    

    删除只是从父级中删除其链接。

    或者可以安排deletion later:

    curItem->deleteLater();
    

    【讨论】:

    • QTreeWidgetItem 不是 QObject,所以你不能在它上面调用 deleteLater()。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-03-25
    • 1970-01-01
    • 1970-01-01
    • 2011-06-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多