Удалить QWidgets из QLayout?
Я заполняю QVBoxLayout
динамически с QWidget
объекты, которые я создаю во время выполнения. Я хотел бы удалить их также во время выполнения, но как?
Я мог бы удалить виджеты один за другим:
void QLayout::removeWidget(QWidget * widget)
Можно ли как-то перебрать макет?
2 ответа
Все дороги ведут в Рим;)
Документация Qt оQLayout::takeAt
состояния:
Следующий фрагмент кода показывает безопасный способ удаления всех элементов из макета:
QLayoutItem *child; while ((child = layout->takeAt(0)) != 0) { ... delete child; }
Чтобы также удалить управляемый виджет, вам нужно добавить всего одну строку:
QLayoutItem *child;
while ((child = layout->takeAt(0)) != 0) {
...
delete child->widget();
delete child;
}
Есть count
метод, который возвращает количество сохраненных виджетов, и itemAt()
метод, который, учитывая индекс, возвращает указатель на относительный сохраненный виджет. Вы можете получить все указатели, а затем удалить их. Сначала вы должны получить все указатели, потому что если вы удалите один из них во время подсчета, то количество сохраненных виджетов изменится во время итераций.
itemAt()
получить QLayoutItem
с widget
метод, который извлекает сам виджет.
while (layout->count() != 0) {
QLayoutItem *item = layout->itemAt(0);
layout->removeWidget(item->widget());
}