我正在编写一个打印图像的应用程序。 简而言之,我有一个带文件名的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>
答案 0 :(得分:0)
问题在于Qt :: SmoothTransformation,我遇到了同样的问题,Qt :: FastTransformation解决了内存泄漏问题。