在QListWidget上加载缩略图,降低分辨率

时间:2015-06-18 12:06:29

标签: image qt qlistwidget qlistwidgetitem

我需要降低我添加并在QListWidgtet中显示的图像的分辨率。 现在我使用下一个代码,但它没有显示所有图像,因为它们正在加载全分辨率

void ImagesWizard::on_pbAddImages_clicked()
{
QFileDialog dialog(this);
dialog.setDirectory(mInitPath);
dialog.setFileMode(QFileDialog::ExistingFiles);
dialog.setNameFilter(trUtf8("Images (*.jpg *.png *.tif *.tiff *.bmp);; JPG (*.jpg);; PNG (*.png);; TIF (*.tif *.tiff);; BMP (*.bmp);;"));

QStringList filesToLoad;
if (dialog.exec())
    filesToLoad = dialog.selectedFiles();


if (filesToLoad.count()!=0) {
        QListWidget *localPathList= new QListWidget();
    localPathList->setViewMode(QListWidget::IconMode );
    localPathList->setIconSize(QSize(100,100));
    localPathList->setResizeMode(QListWidget::Adjust);
    localPathList->setSelectionMode(QAbstractItemView::MultiSelection);
    for (int var = 0; var < filesToLoad.count(); ++var) {
            if (!mImagesList->contains(filesToLoad[var])) {
                QFileInfo fileInfo(filesToLoad[var]);
                QString filename(fileInfo.fileName());
                QListWidgetItem *listItem = new QListWidgetItem(QIcon(filesToLoad[var]),filename);
                localPathList->addItem(listItem);
                mImagesList->append(filesToLoad[var]);
            }
    }
pbNext->setFocus();
}

}

有没有办法调整QIcon的分辨率以优化加载图像所需的时间并显示添加的所有图像? 现在如果我加载了很多图像,那么最后一个QListWidgetItems只会添加名称。

感谢您的帮助

1 个答案:

答案 0 :(得分:1)

首先使用QImage缩放图像并从结果像素图构建图标。

QSize desiredSize;
Qimage orig(filesToLoad[var]);
Qimage scaled = orig.scaled(
            desiredSize,
            Qt::IgnoreAspectRatio,
            Qt::SmoothTransformation);

QListWidgetItem *listItem = new QListWidgetItem(QIcon(Qpixmap::fromImage(scaled)),filename);

将预先确定的图像也存储在磁盘上是很常见的,以避免两步转换过程。

相关问题