Я знаю, что этот вопрос старый и на него дан ответ, но: поскольку QtAlgorithms предлагает qDelteAll, можно удалить макет, включая удаление всех его дочерних элементов с помощью одной строки.
Это повторение текста, который я разместил здесь: https://stackoverflow.com/a/35751235/3292513
Этот код удаляет макет, все его дочерние элементы и все, что находится внутри макета, исчезает.
qDeleteAll(yourWidget->children());
Вот описание перегруженной функции:
void qDeleteAll (начало ForwardIterator, конец ForwardIterator)
Удаляет все элементы в диапазоне [начало, конец] с помощью оператора C ++ delete>. Тип элемента должен быть указателем (например, QWidget *).
Обратите внимание, что qDeleteAll должен передаваться контейнером из этого виджета (не из этого макета). И обратите внимание, что qDeleteAll НЕ удаляет yourWidget
- только его дочерние элементы.
Теперь можно установить новый макет.