QT5.4在布局中删除和删除小部件

时间:2015-04-27 23:24:25

标签: qt qwidget qt5.4 qlayout

我有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行,应用程序工作正常。

1 个答案:

答案 0 :(得分:1)

  

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

  1. 隐藏您要转移的所有小部件
  2. 将所有这些小部件的父窗口小部件设置为nullptr
  3. 稍后...设置必要的父级并显示小部件
  4. 注意:如果要删除某些插槽中的小部件,则应使用deleteLater方法。