【发布时间】:2015-11-03 12:02:13
【问题描述】:
我正在尝试将新父级设置为 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.
已编辑
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 );
同样的结果。
【问题讨论】:
-
像 GDB 这样的调试器会告诉你什么是空的,什么是失败的。
-
没有什么是空的,这就是问题所在。在从父母那里带走或移除孩子之前,它、under 和 parent 都可以很好地工作。
标签: qt qtreewidgetitem