У меня есть приложение Qt, которое использует QPointers для вызова новых диалогов пользовательского интерфейса (виджетов). Основное приложение может иметь множество одинаковых виджетов, загруженных разными данными. У меня проблема в удалении и освобождении памяти для каждого виджета. Если я наблюдаю за использованием оперативной памяти программы, каждый раз, когда я нажимаю кнопку, чтобы открыть один из этих новых виджетов, он увеличивает оперативную память, а когда я закрываю виджет, кажется, что он не освобождает оперативную память. Я пытался использовать deleteLater
и другие решения, но в программе постоянно возникают сбои.
Пример кода приведен здесь:
QPointer<ListReservations> listResWindow = new ListReservations(resID);
listResWindow->setNum(numpeople);
listResWindow->show();
Это вызовет виджет «ListReservations», который объявлен как QDialog
(НЕ модальный). В этом диалоговом окне у меня есть кнопка, чтобы закрыть окно, которое вызывает слот QWidget::close()
.
Полагаю, вопрос в том, как моя основная программа (с QPointer
) узнает, когда диалоговое окно закрыто, а затем освобождает диалоговое окно и (если возможно) удаляет указатель, чтобы сохранить еще больше памяти ...
Я думал, что вы могли бы сделать QConnect()
для объекта QPointer
, но я не могу найти какие-либо сигналы или слоты, которые позволили бы пройти указатель, тем более посылать сигнал, как только Диалог действительно закрыт и готов к удалению.
Может быть, мне нужна какая-то функция в основной программе, которая принимает объект общего указателя, а затем вызывает QDialog перед вызовом своего собственного закрытого слота? В этой функции это пройдет само, чтобы быть уничтоженным? Просто выбрасываю идеи, которые я пытался реализовать, но потерпел неудачу в ....
Я не думаю, что смогу повторно использовать тот же указатель в другом месте, потому что теоретически у вас может быть открыто несколько окон ListReservations одновременно.