Если вы не делаете ничего смешного, когда добавляете виджеты к макетам и макеты к другим макетам, все они должны быть переписаны после добавления в родительский виджет.Все объекты QObject имеют слот deleteLater()
, который приведет к удалению объекта, как только управление вернется в цикл обработки событий.Виджеты, удаленные в этой усадьбе, также удаляют их детей.Поэтому вам просто нужно вызвать deleteLater () для самого высокого элемента в дереве.
в hpp
QScrollArea * Scroll;
в cpp
void ClearAndLoad(){
Scroll->widget()->deleteLater();
auto newLayout = new QVBoxLayout;
//add buttons to new layout
auto widget = new QWidget;
widget->setLayout(newLayout);
Scroll->setWidget(widget);
}
также обратите внимание, что в вашем примере _layout
- это локальная переменная, а не то же самое, что _layout
в заголовочном файле (удалить часть QVBoxLayout*
).Также обратите внимание, что имена, начинающиеся с _, зарезервированы для разработчиков стандартной библиотекиЯ использую завершающий _ как в var_
, чтобы показать локальную переменную, есть много вкусов, но предшествующие _ и __ технически зарезервированы.