我正在尝试开发一个新程序。工作流程如下:
Login --> Dashboard (Window with menus) --> Module 1
--> Module 2
--> Module 3
--> Module XXX
因此,要从Login(对话框)打开仪表板,我使用
Dashboard *d = new Dashboard();
d->show();
close();
在仪表板中,如果用户关闭窗口(通过单击“X”),我会使用这些代码重新打开“登录”
closeEvent(QCloseEvent *)
{
Login *login = new Login();
login->show();
}
打开任务管理器后,我运行程序并监视内存使用情况。从Login中单击打开Dashboard并关闭Dashboard返回Login后,我注意到内存不断增加大约500 KB。只需打开和关闭窗口/对话框,它就可以从12 MB的内存使用量上升到20 MB。
那么,我在这里做错了什么?在继续开发这些模块之前我需要先了解它,这些模块肯定会让我的编程占用更多内存。提前谢谢。
答案 0 :(得分:1)
一个原因可能是您在没有删除的情况下反复创建Login
小部件。
我相信您的登录是QWidget
,信息中心是QDialog
。而不是close()
,只需隐藏hide()
或setvisible(false)
的登录小部件。
在 DashBoard 的closeEvent()
中给出
done(someIntValue);
访问DashBoard时,而不是show()给出
int returnValue = d->exec();
如果returnValue
是someIntValue
,show()
登录小工具。
这样您就可以避免多次创建登录小部件。但是,许多其他因素可能会导致您的内存使用,这只能通过遍历整个代码才能找到。
编辑:
由于您的信息中心是QMainWindow,您无法致电done(someIntValue);
而是尝试连接 DashBoard 的destroyed( QObject * obj = 0 )
信号并在相应的信号中插入show()
登录 ..当然,您应该在登录对话框中使用 DashBoard 实例以及以上信号和插槽应在登录。
希望它有所帮助。