Как удалить QTreeWidgetItem верхнего уровня из QTreeWidget? - PullRequest
7 голосов
/ 22 февраля 2012

Я пытаюсь удалить элемент виджета дерева верхнего уровня, если в элементе верхнего уровня нет дочерних узлов.Как правильно это сделать?Я не могу найти вызов API в документации Qt.Безопасно ли просто вызывать delete в элементе дерева верхнего уровня?Я еще не сталкивался ни с какими проблемами, но я хотел бы знать, безопасна ли эта практика.Большое спасибо.

if(topLevelTreeWidgetItem->childCount() > 1) {
  topLevelTreeWidgetItem->removeChild(childItem);
}
else
{
  delete topLevelTreeWidgetItem;
}

Ответы [ 3 ]

15 голосов
/ 22 февраля 2012

delete непосредственное использование QTreeWidgetItem совершенно безопасно.

Согласно документации для ~ QTreeWidgetItem () :

Уничтожает этот элемент дерева виджета,Элемент будет удален из QTreeWidgets, в который он был добавлен.Это позволяет безопасно удалить элемент в любое время.

Я использовал delete на многих QTreeWidgetItems на практике, и это работает довольно хорошо.

3 голосов
/ 22 февраля 2012

Чтобы удалить элемент верхнего уровня, вызовите метод QTreeWidget :: takeTopLevelItem , а затем удалите возвращенный элемент:

delete treeWidget->takeTopLevelItem(index);

Где индекс - это индекс удаляемого элемента.

2 голосов
/ 06 мая 2014

Функция takeChild работает только с QTreeWidgetItem.С QtreeWidget вы можете использовать QtreeWidget :: takeTopLevelItem (int index)

...