У меня есть QStackedLayout
, который содержит несколько QWidget
на нем. Макет виджетов QVBoxLayout
, который также имеет несколько QPushButton
. Я хотел бы удалить все виджеты внутри QStackedLayout
, а затем удалить виджеты и макеты BUT Я хочу, чтобы все кнопки не удалялись, потому что я поместим их в другой виджет позже.QT5.4 удалить и удалить виджет в макете
Вот мой код:
while (QLayoutItem *item = m_stacked_layout->takeAt(0)) {
QWidget *w = item->widget();
for (int i = 0; i < w->layout()->count(); i++) {
QPushButton *button = qobject_cast<QPushButton *>(w->layout()->itemAt(i)->widget());
if (button) {
w->layout()->removeWidget(button);
}
}
delete w;
delete item;
}
сбой приложения на линии delete w;
. И, если я удалю строки delete
, приложение работает нормально.
Документация для QLayoutItem предполагает, что QLayoutItem :: widget() больше выполняет функцию каста, чем возвращает член. Таким образом, вы не должны удалять виджет отдельно от элемента. –
Виджет также удаляется при удалении QLayoutItem. – iSa
Не получится. Когда вы добавляете виджет в макет, макет берет на себя ответственность за виджет. Удалите макет и удалите виджет. removeWidget не передает права собственности обратно. Поэтому ваши кнопки все равно удаляются. – Greenflow