QListWidget显示缩略图

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/wyy626562203/article/details/82786433

QListWidget显示缩略图

简要分析

使用QListWidget可以显示图片的缩略图,以下是QListWidget中的一个item的结构

在这里插入图片描述

如果只使用setSizeHint来设置item的大小,会发现显示的图片很小。以下是初始化所涉及的相关方法:

QListWidget

//设置单元项间距 
setSpacing(10); 
//设置显示模式,图片在上,名字在下
setViewMode(QListWidget::IconMode); 
//设置item中图片大小
setIconSize(QSize(100,100));
//设置布局策略(Adjust适应,Fixed不适应)
setResizeMode(QListWidget::Fixed);
//清除所有项目(彻底删除)
clear();
//设置单元项不可拖动
setMovement(QListWidget::Static); 
//设置滚动条不显示
setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);

//设置列表滑动手势
QScroller::grabGesture(imageListWidget,QScroller::TouchGesture);
//设置内容以像素为单位滚动
setVerticalScrollMode(QListWidget::ScrollPerPixel);

//设置排序
setSortingEnabled(true);

QListWidgetItem

//设置整个Item的大小
setSizeHint(QSize(100,120));
//设置要显示的图片
setIcon(); 

生成缩略图的核心代码

使用QFutureWatcher监听处理完的缩略图

//生成缩略图
imagesShow = new QFutureWatcher<QImage>(this);
connect(imagesShow, SIGNAL(resultReadyAt(int)), SLOT(setItemInList(int)));

图片缩放完成后就会调用该方法,将缩略图添加到QListWidget

void RSImageShowWidget::setItemInList(int index)
{
    QString name = fileList.at(index).fileName();
    QListWidgetItem *item = new QListWidgetItem(name.split(".").first());
    item->setSizeHint(QSize(320,200));
    item->setIcon(QIcon(QPixmap::fromImage(imagesShow->resultAt(index))));

    imageListWidget->addItem(item);
}

每一张图片都会调用方法进行缩放处理

QImage prepareImage(const QFileInfo &infoFile)
{
    QImage img(infoFile.filePath());
    QImage result = img.scaled(320, 200, Qt::KeepAspectRatio, Qt::SmoothTransformation);

    return result;
}

用于取消缩略图的处理

void RSImageShowWidget::waitFuture()
{
    if (imagesShow->isRunning())
    {
        imagesShow->cancel();
        imagesShow->waitForFinished();
    }
}

开始生成缩略图

imagesShow->setFuture(QtConcurrent::mapped(fileList, prepareImage));

猜你喜欢

转载自blog.csdn.net/wyy626562203/article/details/82786433