Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How do I delete a top level QTreeWidgetItem from a QTreeWidget?

I'm attempting to remove a top level tree widget item if there are no child nodes within the top level item. What is the correct way to do this? I can't seem to find the API call within Qt's documentation. Is it safe to just call delete on the top level tree widget item? I haven't run into any issues yet, but I'd like to know if that's safe practice. Thanks much.

if(topLevelTreeWidgetItem->childCount() > 1) {
  topLevelTreeWidgetItem->removeChild(childItem);
}
else
{
  delete topLevelTreeWidgetItem;
}
like image 991
Cameron Tinker Avatar asked Feb 22 '12 09:02

Cameron Tinker


3 Answers

To delete a top level item call QTreeWidget::takeTopLevelItem method and then delete the returned item:

delete treeWidget->takeTopLevelItem(index);

Where index is index of the item to be removed.

like image 185
Juraj Blaho Avatar answered Nov 02 '22 06:11

Juraj Blaho


deleteing a QTreeWidgetItem directly is perfectly safe.

According to the documentation for ~QTreeWidgetItem():

Destroys this tree widget item. The item will be removed from QTreeWidgets to which it has been added. This makes it safe to delete an item at any time.

I've used delete on many QTreeWidgetItems in practice and it works quite well.

like image 39
Chris Avatar answered Nov 02 '22 04:11

Chris


Function takeChild only works with QTreeWidgetItem. With QtreeWidget, you can use QtreeWidget::takeTopLevelItem(int index)

like image 33
Starfight Avatar answered Nov 02 '22 04:11

Starfight