最近在工作中经常遇到了一个问题就是把把文件夹中的图片全部以缩略图的形式显示出来,刚开始的时候一头雾水,不知道怎么办,经过在网上查资料,发现QListWidget控件可以实现图片的缩略图显示,但是不知道怎么利用这个控件实现这个功能,网上有很多例子,但是在windows系统上用Qt编译这些程序以后却得不到理想的效果,虽然也可以让这些图片以缩略图的形式显示,但是都必须把这些图片做成资源文件,这和平时的开发中把很多即时的图片以缩略图的形式显示完全不同。所以找了好几天资料,最终解决了这个问题,下面是实现缩略图显示的主要代码,只需要把这些代码放入槽函数中就可以实现全部图片以缩略图的形式显示。
代码如下:
QString filePath = tr("/media/sd/PICTURES");
QListWidget *listWidget_File = new QListWidget(this);
listWidget_File->setObjectName(QString::fromUtf8("listWidget_File"));
listWidget_File->setGeometry(QRect(0, 0, 0, 0));
QDirIterator m_DirIterator(QString("/media/sd/PICTURES"),QDir::Files|QDir::NoSymLinks,QDirIterator::Subdirectories);
listWidget_File->clear();//保证每次进入listWidget_File的时候都会是空的
while (m_DirIterator.hasNext())
{
QString tempFile=m_DirIterator.next();
listWidget_File->setIconSize(QSize(100, 100)); //设置QListWidget中的单元项的图片大小
listWidget_File->setResizeMode(QListView::Adjust);
listWidget_File->setViewMode(QListView::IconMode); //设置QListWidget的显示模式
listWidget_File->setMovement(QListView::Static); //设置QListWidget中的单元项不可被拖动
listWidget_File->setSpacing(10); //设置QListWidget中的单元项的间距
QPixmap objPixmap(tempFile); //生成图像objPixmap
//tempfile当中的/media/sd/PICTURES字符串删去,并返回剩余部分
tempFile=tempFile.remove(QString("/media/sd/PICTURES"), Qt::CaseSensitive);
//生成QListWidgetItem对象
QListWidgetItem *pItem = new QListWidgetItem(QIcon(objPixmap.scaled(QSize(100,100))),tempFile);
pItem->setSizeHint(QSize(100,120)); //设置单元项的宽度和高度
listWidget_File->addItem(pItem); //添加QListWidgetItem项
}
listWidget_File->setGeometry(NULL,NULL,480,272);
此段代码我在嵌入式版本的QT中运行成功,并在嵌入式设备中达到预期的目标,Sd卡中的图片全部以缩略图的形式显示了出来。