我对 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 类中存在错误?在 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()
{
}