Как в QHBoxLayout удалить все виджеты?
Доброго времени суток. Задача такая, имеется QHBoxLayout в нем несколько виджетов. Так как мне полностью удалить все виджеты в QHBoxLayout?
Как это осуществить?
Egor12
06.08.17 22:52:51 MSK

virtual int count() const
virtual QLayoutItem * itemAt(int index) const
void removeItem(QLayoutItem * item)
MimisGotAPlan
( 06.08.17 23:14:13 MSK )

а qDeleteAll на его children не сработает?
wolph ★★
( 06.08.17 23:35:42 MSK )

Какое поведение тебе нужно? ЕМНИП, при каких-то сценариях компоновщик не менял размер родительского виджета при удалении элементов компоновки.
Если нужно очистить всё, по-моему, проще удалить сам компоновщик и повесить вместо него новый. Ну либо
while(layout->count()) delete layout->takeAt(0);
Как удалить виджет qt
Я в Qt новичок.
При удаление объектов QWidget удаляються все дочерние виджеты.
Например :
class FindDialog : public QDialog
Q_OBJECT
.
private:
QLabel* label;
QLineEdit* lineEdit;
QCheckBox* caseCheckBox;
QCheckBox* backwardCheckBox;
QPushButton* findButton;
QPushButton* closeButton;
>;
В конструкторе идет создание виджетов через new.
label = new QLabel(tr(«Findd &what»));
lineEdit = new QLineEdit;
При этом в конструкторах не передается this как parent widget.
Как FindDialog object знает, какие у него child?
Как-то сразу не могу понять. Очевидно это как-то связано с инициализацией
private data для всех widgets.
Может кто-то подсказать как это реализовано?
21.01.10 12:56: Перенесено модератором из ‘C/C++. Прикладные вопросы’ — Кодт
Re: Qt QWidget and удаление дочерних виджетов
| От: | Denys V. | http://ua.linkedin.com/in/dvalchuk |
| Дата: | 20.04.09 21:46 | |
| Оценка: |
Здравствуйте, Аноним, Вы писали:
А>Я в Qt новичок.
А>При удаление объектов QWidget удаляються все дочерние виджеты.
А>Например :
А>class FindDialog : public QDialog
А> <
А> Q_OBJECT
А> .
А>private:
А> QLabel* label;
А> QLineEdit* lineEdit;
А> QCheckBox* caseCheckBox;
А> QCheckBox* backwardCheckBox;
А> QPushButton* findButton;
А> QPushButton* closeButton;
А>>;
А> В конструкторе идет создание виджетов через new.
А> label = new QLabel(tr(«Findd &what»));
А> lineEdit = new QLineEdit;
А>При этом в конструкторах не передается this как parent widget.
А>Как FindDialog object знает, какие у него child?
А>Как-то сразу не могу понять. Очевидно это как-то связано с инициализацией
А>private data для всех widgets.
А>Может кто-то подсказать как это реализовано?
если в последствии эти все виджеты добавляются в layout — то он их и удалит (насколько я помню)
если нет — то нужно передавать parent widget при создании как параметр конструктора.
С уважением Denys Valchuk
IMHO чем больше мнений тем оптимальней выбор варианта. 🙂
Re: Qt QWidget and удаление дочерних виджетов
| От: | fdn721 |
| Дата: | 21.04.09 05:46 |
| Оценка: |
В QT за всеми объектами унаследованными от QObject следит их родитель.
Родитель задаётся в конструкторе или методом SetParent().
Если виджет добавляется в QLayout то QLayout ему автоматически прописывается в родители.
т.о. объекты у которых задан родитель удалятся автоматически.
Удаление виджета в PyQt5
Допустим, есть QVBoxLayout, в который динамически добавляются кнопки:
labels = ['Button 1', 'Button 2', 'Button 3'] for label in labels: button = QPushButton(label) self.vbox.addWidget(button)
Это происходит внутри метода класса и по идее все переменные локальные, так что должны уничтожиться после выхода из него (если сделать button = None в конце, то ничего не меняется).
А затем в какой-то момент времени мы хотим удалить эти кнопки:
while self.target_buttonbox.takeAt(0): pass
В результате данного цикла кнопки удаляются лишь из layout’а, но не сами объекты. Это выглядит как видимые кнопки, которые больше не подчиняются layout. Если же делать не просто takeAt, а вызывать deleteLater к полученному takeAt виджету, то приложение крашится.
Как правильно удалить все виджеты окончательно?
Как удалить виджет qt
Дорогие друзья!
Поздравляем вас с Новым 2024 годом!
- Форум на Исходниках.RU
- Программирование
- C/C++
- Кроссплатформенный C/C++: cl/gcc/Qt/Gtk+/WxWidgets
Нравится ресурс?
Правила раздела *nix / gcc / Eclipse / Qt / wxWidgets / GTK+
- При создании темы ОБЯЗАТЕЛЬНО указывайте версию тулкита / библиотеки / компилятора.
- Перед тем как задать вопрос, сформулируйте его правильно, чтобы вас могли понять.
- Нарушение Правил может повлечь наказание со стороны модераторов.
Модераторы: archimed7592
‘> Удаление элементов из layout
- Подписаться на тему
- Сообщить другу
- Скачать/распечатать тему
Сообщ. #1 , 18.08.11, 11:28
Unregistered
Доброго времени суток. Столкнулся с проблемой удаления виджетов из компоновщика в Qt. Сделал как написано в Qt Assistant’е, но почему-то все равно не хочет работать. При таком удалении на форме остается след старых виджетов. В чем может быть причина?
QLayoutItem *child;
while ((child = lay->takeAt(0)) != 0)