• 5017阅读
  • 5回复

[提问]setParent [复制链接]

上一主题 下一主题
离线郑关耳
 

只看楼主 倒序阅读 楼主  发表于: 2012-12-07
关键词: QT4问题
问题1:这样有问题么filter->setParent(NULL);delete filter;
问题2:我用如下方式清空所有的子对象,有问题么?
void BMFilterCase::clear(){    bmDebug("BMFilterCase::clear");    for( int i=0; i<children().count(); i++ )    {        if(children().at(i)->inherits("BMFilterAbstract"))        {            children().at(i)->setParent(NULL);            delete children().at(i);        }    }}
离线郑关耳

只看该作者 1楼 发表于: 2012-12-07
对不起,我不知道在论坛里怎么打回车,看起来有点糟。
离线shiziyang

只看该作者 2楼 发表于: 2012-12-07
看上去第一个没错,第二个有问题。
你的children()至少也应该先保存个临时变量吧,不然第一次remove了一个child,第二次再调用children().at(i)这次children()拿到的list已经不是上次那个了,次数已经减一了,然后i还是按照第一次的count来算,最后会越界的,至少我是这么理解的。
离线郑关耳

只看该作者 3楼 发表于: 2012-12-07
回 2楼(shiziyang) 的帖子
嗯,谢谢
离线郑关耳

只看该作者 4楼 发表于: 2012-12-07
回 2楼(shiziyang) 的帖子
void BMFilterCase::clear()
{
    bmDebug("BMFilterCase::clear");
    QList<BMFilterAbstract *> filters = findChildren<BMFilterAbstract *>();
    while(filters.count() != 0)
    {
        children().first()->setParent(NULL);
    }
}

这样的代码,能否在BMFilterCase中去掉所有基类为BMFilterAbstract的子对象?
离线shiziyang

只看该作者 5楼 发表于: 2012-12-10
回 4楼(郑关耳) 的帖子
filters的计数如果不是0那不是永远也出不了循环了?
快速回复
限100 字节
 
上一个 下一个