版权声明:本文为博主原创文章,未经博主允许不得转载。 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));