打开和关闭窗口/对话框的正确方法是什么?

时间:2010-06-14 10:49:00

标签: qt memory-management

我正在尝试开发一个新程序。工作流程如下:

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。

那么,我在这里做错了什么?在继续开发这些模块之前我需要先了解它,这些模块肯定会让我的编程占用更多内存。提前谢谢。

1 个答案:

答案 0 :(得分:1)

一个原因可能是您在没有删除的情况下反复创建Login小部件。

我相信您的登录QWidget信息中心QDialog。而不是close(),只需隐藏hide()setvisible(false)登录小部件。

DashBoard closeEvent()中给出 done(someIntValue);

访问DashBoard时,而不是show()给出

int returnValue = d->exec();

如果returnValuesomeIntValueshow()登录小工具。

这样您就可以避免多次创建登录小部件。但是,许多其他因素可能会导致您的内存使用,这只能通过遍历整个代码才能找到。

编辑:

由于您的信息中心是QMainWindow,您无法致电done(someIntValue);而是尝试连接 DashBoard destroyed( QObject * obj = 0 )信号并在相应的信号中插入show() 登录 ..当然,您应该在登录对话框中使用 DashBoard 实例以及以上信号和插槽应在登录

中进行

希望它有所帮助。