我已经为我的大学作业创建了一个简单的QT应用程序。我所做的是从上方的QMainWindow弹出一个新的QManinWindow。当我从主界面单击一个按钮时,它将弹出一个新的QMainWindow对象(记事本)
记事本也是QMainWindow对象
我的问题是,当我创建对象时,它从ram占用了一些内存,但是当我关闭它(弹出窗口)时,内存却没有释放。每次按下按钮时,都会分配内存,但在关闭内存时应用程序不会占用内存。请检查应用程序的主屏幕。
我只想知道如何释放该内存。我已经尝试了很多东西,但是没有任何效果。
我在NotePad类上设置了closeEvent公共类,当触发它时,我从主对象监听了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");
}
答案 0 :(得分:2)
您实际上并不需要重写closeEvent
,Qt具有Qt::WA_DeleteOnClose属性,该属性正是您想要的,您可以像这样使用它:
//...
NotePad *notePad = new NotePad(this);
notePad->setAttribute(Qt::WA_DeleteOnClose);
notePad->raise();
notePad->activateWindow();
notePad->show();
//...
答案 1 :(得分:-2)
我对Qt不熟悉。
但是据我了解,如果您使用新运算符
您必须使用delete
(在您可以访问用new创建的指针的范围内)。
Object *foo = new Object();
// Do stuff with foo...
delete foo;
// DO NOT use foo from now on.
希望能有所帮助。就像我说的,我对Qt不熟悉 因此,如果您对某些功能的实现方式有疑问,则应查看其文档。
(cf:http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3797.pdf§3.7.4p63)