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