diff --git a/src/libs/utils/treemodel.cpp b/src/libs/utils/treemodel.cpp
index c0521c1499016fc2bfa9e8254c8af989a175f95d..4a1e897b4cf6e8d6b9e16a273b452647d78f810c 100644
--- a/src/libs/utils/treemodel.cpp
+++ b/src/libs/utils/treemodel.cpp
@@ -326,6 +326,17 @@ void TreeModel::removeItem(TreeItem *item)
     endRemoveRows();
 }
 
+void TreeModel::removeAllSubItems(TreeItem *item)
+{
+    QTC_ASSERT(item, return);
+    if (item->rowCount() == 0)
+        return;
+    QModelIndex idx = indexFromItem(item);
+    beginRemoveRows(idx, 0, item->rowCount() - 1);
+    item->clear();
+    endRemoveRows();
+}
+
 QModelIndex TreeModel::indexFromItemHelper(const TreeItem *needle,
     TreeItem *parentItem, const QModelIndex &parentIndex) const
 {
diff --git a/src/libs/utils/treemodel.h b/src/libs/utils/treemodel.h
index 5707dfb3d7a7140b5bf8b95b94395b69578a5fc6..da5b2d717a59f97ba5fb299bc05e492a4ed120a5 100644
--- a/src/libs/utils/treemodel.h
+++ b/src/libs/utils/treemodel.h
@@ -177,6 +177,7 @@ public:
 
     void appendItem(TreeItem *parent, TreeItem *item);
     void removeItem(TreeItem *item); // item is not destroyed.
+    void removeAllSubItems(TreeItem *item); // item is not destroyed.
     void updateItem(TreeItem *item); // call to trigger dataChanged
 
     UntypedTreeLevelItems untypedLevelItems(int level = 0, TreeItem *start = 0) const;