一.前言
楼主在实际开发中,遇到这样一个需求,需要加载指定目录下所有图片,并显示其缩略图,一开始以为需要用QLabel去做,自己手动设置大小,没想到可以QListWIdget提供了IconMode这个显示模式,可以轻松做到
二.核心代码
#include "ImageListWidget.h"
#include "ui_ImageListWidget.h"
ImageListWidget::ImageListWidget(QWidget *parent) :
QWidget(parent),
ui(new Ui::ImageListWidget)
{
ui->setupUi(this);
/*******************属性设置************************************/
// 设置显示模式
ui->listWidget_image->setViewMode(QListView::IconMode);
// 甚至随略图的大小
ui->listWidget_image->setIconSize(QSize(100,100));
// 设置图标间距
ui->listWidget_image->setSpacing(15);
// 设置图标是否可以拖动,这里设置静止
ui->listWidget_image->setMovement(QListWidget::Static);
// 连接点击信号
connect(ui->listWidget_image,&QListWidget::itemClicked,this,&ImageListWidget::listwidgetImageOnclicked);
}
ImageListWidget::~ImageListWidget()
{
delete ui;
}
void ImageListWidget::on_pushButton_image_clicked()
{
QString path = QFileDialog::getExistingDirectory(this,QStringLiteral("选择图片文件夹"));
if(path.isEmpty())
return;
dirPath_=path;
qDebug()<<path;
QDir dir(path);
QStringList filters;
filters<<"*.png"<<"*.jpg"; // 设置哪些格式图片的可以显示
dir.setNameFilters(filters);
imageDir_ = dir;
// 设置显示的itme
for(uint idx=0;idx<dir.count();idx++)
{
QListWidgetItem *pItem = new QListWidgetItem;
QString imagePath = QString("%1\\%2").arg(path).arg(dir[idx]);
qDebug()<<dir[idx];
pItem->setIcon(QIcon(imagePath));
pItem->setSizeHint(QSize(100,100));
ui->listWidget_image->addItem(pItem);
}
}
void ImageListWidget::listwidgetImageOnclicked(QListWidgetItem *pItem)
{
int idx = ui->listWidget_image->row(pItem);
QString imagePath=QString("%1/%2").arg(dirPath_).arg(imageDir_[idx]); // 图片路径拼接
ui->label_path->setText(imagePath);
}