Как удалить все дочерние элементы окна Qt? - PullRequest
1 голос
/ 21 ноября 2011

У меня есть главное окно, в котором я динамически создаю объекты, поэтому перед созданием любого нового экрана я должен сначала удалить все объекты с последнего экрана. Я использовал это, и он работал отлично:

qDeleteAll(this->window->findChildren<QWidget*>());

Но теперь у меня есть этот экран, который имеет некоторые значения QGraphicsView и QGraphicsScene, и я также сделал их родительское окно главным окном, и теперь у меня происходит сбой при попытке удалить всех дочерних элементов главного окна.

Так что мой вопрос в основном, как я могу избежать этого сбоя? Как я могу легко и безопасно удалить все дочерние элементы моего главного окна, включая GraphicsScene и GraphicsView?

1 Ответ

5 голосов
/ 21 ноября 2011

Я подозреваю, что ваш сбой вызван двойным удалением.

Родительско-дочерние отношения QObject делают так, что если родитель удаляется, его дочерние элементы также удаляются.Поэтому, если вы хотите удалить виджет и все его потомки, все, что вам нужно сделать, - это удалить родительский элемент.

В вашем случае, вероятно, я бы убедился, что все динамически созданные виджеты принадлежат к какому-либо контейнерувиджет / кадр и удалить его, а затем воссоздать его.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...