Перейти к содержимому

Как удалить виджет qt

  • автор:

Как в 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)

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *