QTreeWidgetItem重新显示

时间:2015-11-03 12:02:13

标签: qt qtreewidgetitem

我正在尝试将新的父级设置为QTreeWidgetItem,这是我的代码:

 1.if( it->parent() )//'it' is QTreeWidgetItem
 2.   {
 3.       QTreeWidgetItem* parent = it->parent();
 4.       parent->takeChild(parent->indexOfChild(it));
 5.   }
 7.   under->addChild( it );//'under' is new parent of 'it'

第四行程序以read access violation at 0x0失败后。

EDITED

    Q_CHECK_PTR(under);
    Q_CHECK_PTR(it);

    if( it->parent() )
    {
        QTreeWidgetItem* parent = it->parent();

        Q_CHECK_PTR(parent);

        Q_ASSERT( parent->child( parent->indexOfChild(it) ) == it );

        parent->removeChild(it);
        //or
        //it = new QTreeWidgetItem( *(parent->takeChild(parent->indexOfChild(it))) );
        //or
        //it = parent->takeChild(parent->indexOfChild(it));
        //or
        //parent->takeChild(parent->indexOfChild(it));
    }
    Q_CHECK_PTR(under);
    Q_CHECK_PTR(it);
    under->addChild( it );

同样的结果。

1 个答案:

答案 0 :(得分:0)

试试这段代码:

QTreeWidgetItem *parent = it->parent();
parent->removeChild(it);
under->addChild(it);  

基本上使用removeChild

takeChild内容

<强>更新
removeChild从父项中删除给定项目,不再返回任何项目。请注意,删除的项目不会被删除。但takeChild返回子指针。