Как освободить память? - PullRequest
0 голосов
/ 31 декабря 2018

Я создал простое приложение QT для моего университетского назначения.Я сделал всплывающее окно QManinWindow из окна QMainWindow.Когда я нажимаю кнопку в главном пользовательском интерфейсе, появляется новый объект QMainWindow (Note Pad)

Блокнот также является объектом QMainWindow

Моя проблема возникает при создании объектаЭто занимает некоторую память от оперативной памяти, но когда я закрываю ее (всплывающее окно), память не освобождается.При каждом нажатии кнопки выделяется память, но приложение не освобождает память при закрытии.Пожалуйста, проверьте главный экран приложения.

Я просто хочу знать, как освободить эту память.Я пробовал так много вещей, но ничего не получалось.

Я установил public closeEvent для класса NotePad, и я слушаю событие close из основного объекта, когда его запускают, я удалил всплывающий объект.Но это вызывает неожиданную остановку.

void MainWindow::on_notePadBtn_clicked()
{

    NotePad *notePad = new NotePad(this);
    notePad->raise();
    notePad->activateWindow();
    notePad->show();
}


NotePad::NotePad(QWidget *parent) :QMainWindow(parent),ui(new Ui::NotePad) {

    ui->setupUi(this);
    this->setWindowTitle("Note Pad");
}

Ответы [ 2 ]

0 голосов
/ 01 января 2019

Я не знаком с Qt.

Но, насколько я понимаю, если вы используете оператор new, вы должны использовать delete (в области, где у вас есть доступ к указателю, созданному с помощью new).

Object *foo = new Object();
// Do stuff with foo...
delete foo;
// DO NOT use foo from now on. 

Надеюсь, это немного поможет, может быть.Как я уже сказал, я не знаком с Qt, поэтому, если у вас есть сомнения по поводу того, как реализованы некоторые функции, вам следует ознакомиться с их документами.

(ср .: http://www.open -std.org / jtc1 / sc22 / wg21 / docs /apers / 2013 / n3797.pdf §3.7.4p63)

0 голосов
/ 01 января 2019

Вам не нужно переопределять closeEvent, Qt имеет атрибут Qt :: WA_DeleteOnClose , который делает именно то, что вы хотите, вы можете использовать его так:

//...
NotePad *notePad = new NotePad(this);
notePad->setAttribute(Qt::WA_DeleteOnClose);
notePad->raise();
notePad->activateWindow();
notePad->show();
//...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...