Qt5 QLabel + QPixmap。内存泄漏?

时间:2015-03-26 10:27:07

标签: windows qt memory

我正在编写一个打印图像的应用程序。 简而言之,我有一个带文件名的QListWidget,我有一个用于打印的QLabel。

这是初始化(如果它很重要):

connect(ui->filesList, SIGNAL(itemClicked(QListWidgetItem*)), this,
        SLOT(onFilesListItemClicked(QListWidgetItem*)));

ui->contents->setAlignment(Qt::AlignCenter);

以下是代码:

void MainWindow::onFilesListItemClicked(QListWidgetItem* item) {
    ui->contents->clear();
    QString filename = item->text();

    if (filename.split('.')[1]  == "png") {
        QPixmap pixmap(skinfolderpath + "/" + filename);

        if ((pixmap.height() > ui->contents->height()) || (pixmap.width() > ui->contents->width())) {
            pixmap = pixmap.scaled(ui->contents->width(), ui->contents->height(),
                                   Qt::KeepAspectRatio, Qt::SmoothTransformation);
        }

        ui->contents->setPixmap(pixmap);
    }
}

问题是内存加起来没有被释放。例如,如果我点击图片,内存将被分配。然后我点击另一个,内存加起来没有释放上一张图片的空间。这导致在使用应用程序的几分钟内占用大量内存,这绝对是我不想要的。 那么,有没有办法解决它?它显然来自一个"浮动" QPixmap在某个地方,但我不知道如何删除它。

对于实施,我使用pixmap.scaled而不是仅设置ui->contents->setScaledContents(true),因为在我的情况下,它会保持宽高比,但在scaledContents的情况下,它不会。 此外,我知道ui->contents->clear()在这里没用,因为使用ui->contents->setPixmap重新设置像素图会清除所有内容,但是,我仍然试图找到我所遗漏的内容。 / p>

1 个答案:

答案 0 :(得分:0)

问题在于Qt :: SmoothTransformation,我遇到了同样的问题,Qt :: FastTransformation解决了内存泄漏问题。