Qt内存管理。怎么了?

时间:2010-10-05 16:38:14

标签: qt

我对Qt中的内存泄漏有疑问。

我有一个带有2个QPushButtons的QMainWindow。

第一个按钮点击信号:

m_label = new QLabel(this);

QPixmap pix(this->size());
QPainter painter;
painter.begin(&pix);

QImage img("1.png");
painter.drawPixmap(this->rect(), QPixmap::fromImage(img));
m_label->setPixmap(pix);

painter.end();

Secont按钮点击信号:

delete m_label;

当我启动测试应用程序时,分配的内存大约为11900 Kb 当我点击第一个按钮时,为app分配的内存大约是12450 Kb 当我点击第二个按钮时,我分配了大约12250 Kb的内存

为什么我没有得到相同的11900 Kb?这是泄密吗?

所以如果要编写以下代码:

QImage img("1.png");
QImage img1("1.png");
QImage img2("1.png");
QImage img3("1.png");
QImage img4("1.png");
QImage img5("1.png");
QImage img6("1.png");
QImage img7("1.png");
QImage img8("1.png");
QImage img9("1.png");

然后分配的内存增长但不减少。为什么?如何清理这个内存泄漏?

1 个答案:

答案 0 :(得分:3)

  1. 在第一次调用QImage img(“1.png”)之后,Qt加载图像格式插件,并在使用后将其加载(用于性能问题)。因此剩下的部分内存来自加载的插件,而且它不是泄漏。
  2. 你在哪里分配那些QImages(img ... img9 case)?你确定它们超出了范围吗?
  3. 请记住,在您的软件释放后,操作系统并不会立即保留内存。