我正在尝试将新的父级设置为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 );
同样的结果。
答案 0 :(得分:0)
试试这段代码:
QTreeWidgetItem *parent = it->parent();
parent->removeChild(it);
under->addChild(it);
基本上使用removeChild
takeChild
内容
<强>更新强>
removeChild
从父项中删除给定项目,不再返回任何项目。请注意,删除的项目不会被删除。但takeChild
返回子指针。