У меня есть главное окно, где я создаю объекты динамически, поэтому перед тем, как создавать новый экран, я должен сначала удалить все объекты с последнего экрана. Я использовал это, и это работает прекрасно:Как удалить всех детей окна Qt?
qDeleteAll(this->window->findChildren<QWidget*>());
Но теперь у меня есть этот экран, который имеет некоторые QGraphicsView
и QGraphicsScene
, и я сделал их родитель главного окна, а также, и теперь я получил аварию, когда я попробуйте удалить все дети главного окна.
Так что мой вопрос в основном, как я могу избежать этой аварии? Как я могу легко и безопасно удалить всех детей моего главного окна, включая GraphicsScene
и GraphicsView
?
Вы имеете в виду «потомки»? Не уверен, что Qt-виджеты даже нужно удалить. Они подсчитываются, поэтому, если вы повторно используете один или несколько, есть небольшая стоимость, чтобы держать их вокруг. – casualcoder
QObjects удалит своих детей при удалении, но в систему QObject нет счетчика ссылок. Программисту все равно, чтобы обеспечить правильное управление памятью, это просто упрощает работу. – Chris
Это отлично работает, я просто создал QWidget, который я использую как родительский для всех объектов, и сделал главное окно родителем этого нового QWidget, а затем просто удалю его, чтобы удалить все объекты. Можете ли вы, ребята, больше поговорить об этой проблеме с памятью? Должен ли я что-то сделать, чтобы гарантировать, что у меня не будет нехватки памяти? Моя программа работает во встроенных системах, поэтому управление памятью очень важно! Спасибо. –