我在Qt中遇到内存泄漏问题。
问题是,当我运行像:
这样的方法时qwidget->show();
qwidget->hide();
qwidget->setVisible(...);
qlabel->setText(...);
qwidget->setEnabled(...);
然后它泄漏了记忆。
我不会动态创建任何对象。我在启动时创建了所有小部件,我只是隐藏和显示小部件并一直在某些标签上更改文本。
当我删除这些方法时,它根本不会泄漏内存。
是否有人知道为什么会这样,或者有人知道引擎盖下发生了什么?或者Qt有内存问题吗?
我在发布模式下使用Qt 5.0.1 x64运行Windows 7 x64。
现在我添加了一个测试代码:
#include "qtmemoryleaktest.h"
#include "Content_Logs.h"
QWidget* m_placeholder;
bool m_toggle;
QtMemoryLeakTest::QtMemoryLeakTest(QWidget *parent)
: QMainWindow(parent)
{
ui.setupUi(this);
m_placeholder = new Content_Logs(this);
this->layout()->addWidget( m_placeholder );
connect( ui.pushButton, &QPushButton::clicked, this, &QtMemoryLeakTest::toggleClick );
}
void QtMemoryLeakTest::toggleClick()
{
if( m_toggle = !m_toggle )
{
m_placeholder->show();
}
else
{
m_placeholder->hide();
}
}
每次点击按钮,内存都会增长。在20分钟内从8 mb到47 mb。 但是如果将Content_Logs替换为QWidget,则没有内存泄漏。所以我认为Qts自我创建的ui-classes中有一个错误?在Content_Logs中,我有标签,lineEdits,Spacers,TableWidgets,Checkboxes,DateTimeEdits,ComboBoxes等。
Conte_Logs中的代码:
#include "Content_Logs.h"
Content_Logs::Content_Logs( QWidget* parent = 0 )
: QWidget( parent )
{
ui.setupUi( this );
}
Content_Logs::~Content_Logs()
{
}