一、 删除节点以及子节点
在删除时, currentItemChanged 一定要做判断, 不然删除最后一个会报错。
void MainWindow::removeItem(QTreeWidgetItem *item)
{
int count = item->childCount();
if(count == 0)//没有子节点,直接删除
{
delete item;
return;
}
for(int i=0; i<count; i++)
{
QTreeWidgetItem *childItem = item->child(0);//删除子节点
removeItem(childItem);
}
delete item;//最后将自己删除
}
void MainWindow::on_treeWidget_currentItemChanged(QTreeWidgetItem *current, QTreeWidgetItem *previous)
{
Q_UNUSED(previous);
if(current == NULL)
return;
}
二、遍历节点
void MainWindow::on_toolButton_4_clicked()
{
int count = ui->treeWidget->topLevelItemCount(); // 获取第一级节点个数
for(int i = 0; i < count; i++)
{
QTreeWidgetItem* item = ui->treeWidget->topLevelItem(i);
traverseEachNode(item);
}
}
void MainWindow::traverseEachNode(QTreeWidgetItem *item)
{
int count = item->childCount();
if (count == 0)
{
qDebug()<< "末梢" << item->data(0,Qt::UserRole);
return;
}
else
{
for (int i = 0; i < count; i++)
{
QTreeWidgetItem * childItem = item->child(i);
qDebug()<< "子节点" << childItem->data(0,Qt::UserRole);
traverseEachNode(childItem);
}
}
}