0

我有一个QStackedLayout包含很少QWidget的内容。小部件布局QVBoxLayout也很少QPushButton。我想要做的是删除里面的所有小部件QStackedLayout,然后删除小部件和布局我希望不要删除所有按钮,因为我稍后会将它们放到另一个小部件中。

这是我的代码:

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行,应用程序就可以正常工作。

4

1 回答 1

1

但我希望不要删除所有按钮,因为稍后我会将它们放到另一个小部件中。

  1. 隐藏您要传输的所有小部件
  2. 将所有这些小部件的父小部件设置为nullptr
  3. 稍后...设置必要的父级并显示小部件

注意:如果要删除某些插槽内的小部件,则应使用deleteLater方法。

于 2015-04-28T09:11:48.830 回答