Qt之QFileIconProvider(根据扩展名获取文件图标、类型)
2023-09-27 14:19:43 时间
简述
在Qt之QFileIconProvider一节中已经讲解关于如何获取文件图标与类型。但只仍针对本地已存在的文件,此节,我们主要运用前面分享的内容,讲述如何通过任意后缀或本地不存在的文件来获取相关的图标与类型。
步骤
因为Qt本身并没有提供对于不存在文件获取图标、类型的接口,所以我们只能另寻出路。
步骤:
- 通过扩展名(如:txt、exe、pptx)构建临时文件QTemporaryFile。
- 通过QFileIconProvider获取对应的图标、类型 。
- 删除临时文件。
示例
效果
源码
获取图标、类型
QIcon fileIcon(const QString &extension) const
{
QFileIconProvider provider;
QIcon icon;
QString strTemplateName = QDir::tempPath() + QDir::separator() +
QCoreApplication::applicationName() + "_XXXXXX." + extension;
QTemporaryFile tmpFile(strTemplateName);
tmpFile.setAutoRemove(false);
if (tmpFile.open())
{
tmpFile.close();
icon = provider.icon(QFileInfo(strFileName));
// tmpFile.remove();
}
else
{
qCritical() << QString("failed to write temporary file %1").arg(tmpFile.fileName());
}
return icon;
}
QString fileType(const QString &extension) const
{
QFileIconProvider provider;
QString strType;
QString strFileName = QDir::tempPath() + QDir::separator() +
QCoreApplication::applicationName() + "_XXXXXX." + extension;
QTemporaryFile tmpFile(strFileName);
tmpFile.setAutoRemove(false);
if (tmpFile.open())
{
tmpFile.close();
strType = provider.type(QFileInfo(tmpFile.fileName()));
// tmpFile.remove();
}
else
{
qCritical() << QString("failed to write temporary file %1").arg(tmpFile.fileName());
}
return strType;
}
根据扩展名获取对应的文件图标、类型
QListWidget *pListWidget = new QListWidget(this);
pListWidget->setIconSize(QSize(48, 48)); // 设置单元项图片大小
pListWidget->setResizeMode(QListView::Adjust); // 设置大小模式-可调节
pListWidget->setViewMode(QListView::IconMode); // 设置显示模式
pListWidget->setMovement(QListView::Static); // 设置单元项不可被拖动
pListWidget->setSpacing(10); // 设置单元项间距
QStringList strList;
strList << QString::fromLocal8Bit("exe") << QString::fromLocal8Bit("zip")
<< QString::fromLocal8Bit("har") << QString::fromLocal8Bit("hwl")
<< QString::fromLocal8Bit("accdb") << QString::fromLocal8Bit("xlsx")
<< QString::fromLocal8Bit("pptx") << QString::fromLocal8Bit("docx")
<< QString::fromLocal8Bit("jnt") << QString::fromLocal8Bit("txt");
for (int i = 0; i < strList.count(); ++i)
{
// 获取图标、类型
QIcon icon = fileIcon(strList.at(i));
QString strType = fileType(strList.at(i));
// 添加单元项
QListWidgetItem *pItem = new QListWidgetItem(pListWidget);
pItem->setIcon(icon);
pItem->setText(strType);
pListWidget->addItem(pItem);
}
更多参考
相关文章
- QT 对文件的操作(创建、拷贝、写入、删除)
- Qt没有被正确安装,请运行make install -- 问题的解决办法
- Qt打包部署程序自动查找依赖DLL工具windeployqt
- Qt生成ui文件对应的.h和.cpp文件
- Qt Creator开发的程序提升到管理员权限运行
- Qt中创建、写入、删除(INI、XML文件)
- QT中操作Txt文件(Qt中QString与QByteArray互相转化方法)
- Qt中创建使用动态链接库详解及实例
- QT中文件操作
- 嵌入式Qt(实验二)——Qt文件IO
- Qt音视频开发20-vlc内核动态保存录像文件(不需要重新编译源码)
- Qt编写本地摄像头综合应用示例(qcamera/ffmpeg/v4l2等)
- Qt数据库应用20-csv文件转xls
- Qt数据库应用18-横向纵向排版
- Qt编写的项目作品23-推流综合应用示例
- Qt编写安防视频监控系统19-日志查询
- Qt编写自定义控件65-光晕日历
- Qt 子窗口内嵌到父窗口中
- Qt之QToolBox
- Qt之保存/恢复窗口的几何形状
- Linux Qt5 二. QT中.pro文件的语法
- Qt -------- 容器类
- Qt实现系统桌面目录下文件搜索的GUI:功能一:文件查找与现实
- Qt如何读取.txt文件(将内容读到文本编辑框)
- Qt connect parent widget 连接父控件的信号槽
- QT 5.12 安装MinGW 7.3.0 32bit
- VS导入QT项目出现编译错误 rcc (I:XXXXXbinrcc.exe)