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 に答える