当我们打开图片时,通常会使用一些图片软件来看图,当我们把图片移进看图软件时,会立马显示出当前图片和当前图片路径下的所有图片,我们还可以点击任意一张图片,右键来查看当前图片的属性,实现这两个功能的类主要用到了QDir路径类和QFileInfo文件属性类.
#include "c.h"
c::c(QWidget *parent)
: QWidget(parent)
{
ui.setupUi(this);
//
this->setAcceptDrops(true);
}
c::~c()
{
}
//下面是关于拖拽的三个虚方法的重写不是重点,在之前的博客有讲.
void c::dragEnterEvent(QDragEnterEvent *event)
{
if (event->mimeData()->hasUrls())
{
event->setDropAction(Qt::MoveAction);
event->accept();
}
}
void c::dragMovedEvent(QDragMoveEvent *event)
{
if (event->mimeData()->hasUrls())
{
event->setDropAction(Qt::MoveAction);
event->accept();
}
}
void c::dropEvent(QDropEvent *event)
{
auto list = event->mimeData()->urls();
//获取拖拽进来的图片的路径.
m_dropPictureAbsolutePath = list[0].toLocalFile();
QFileInfo info(m_dropPictureAbsolutePath);
//获取当前路径的上一层路径的绝对路径.
QString absolutePath = info.absolutePath();
QDir dir(absolutePath);
//设置过滤器,因为这里只需要用到图片.
QStringList filter;
filter << "*.png" << "*.jpg" << "*.bmp";
//通过路径类的entryList方法获取满足要求的绝对路径.第一个参数为自定义的过滤器,第二个参数是QDir类封装的过滤文件和目录的列表,第三个参数是路径在List容器中的排序方式,一般来说根据本地图片的排序情况自动排序.
auto picturePathList = dir.entryList(filter,QDir::Files, QDir::Size | QDir::LocaleAware | QDir::Type | QDir::Reversed | QDir::Time);
//这个方法和上一个方法参数相同,唯一不同的是,它返回的是一个QFileInfoList.它相当于是一个QList<QFileInfo>的容器.通常使用这个方法,因为QFileInfo类中封装了很多关于文件属性的方法.
auto pictureInfoList = dir.entryInfoList(filter, QDir::Files, QDir::Size | QDir::LocaleAware | QDir::Type | QDir::Reversed | QDir::Time);
//图片的大小.以字节为单位.
int pictureSize = pictureInfoList.at(0).size();
//获取图片的大小.
QPixmap temp(pictureInfoList.at(0).absoluteFilePath());
QSize size = temp.size();
//获取图片的格式.
QString pictureSuffix = pictureInfoList.at(0).suffix();
//获取图片的名称.
QString baseName = pictureInfoList.at(0).baseName();
//获取文件的创建时间.
QDateTime createdTime = pictureInfoList.at(0).created();
//获取文件最后一次被修改的时间.
QDateTime modifiedTime = pictureInfoList.at(0).lastModified();
//获取文件最后一次访问的时间.
QDateTime lastReadTime = pictureInfoList.at(0).lastRead();
//判断文件是否可读.
bool isRead = pictureInfoList.at(0).isReadable();
//判断文件是否隐藏.
bool isHidden = pictureInfoList.at(0).isHidden();
//判断文件是否可写.
bool isWrite = pictureInfoList.at(0).isWritable();
}