Qt之QFileIconProvider(根据扩展名获取文件图标、类型)
简述
在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之QFileIconProvider(根据扩展名获取文件图标、类型)的更多相关文章
- Qt之根据扩展名获取文件图标、类型
简述 在C++根据扩展名获取文件图标.类型一节中我们分享了如何根据扩展名来获取对应的文件图标.类型,下面.我们在Qt中使用它. 简述 示例 效果 源码 更多参考 示例 如下,我们根据扩展名来获取对应的 ...
- C++根据扩展名获取文件图标、类型
简述 在Windows系统中,根据扩展名来区分文件类型,比如:.txt(文本文件)..exe(可执行程序).*.zip(压缩文件),下面,我们来根据扩展名来获取对应的文件图标.类型. 简述 源码 源码 ...
- java基础知识回顾之javaIO类--File类应用:获取指定目录下面的指定扩展名的文件,将文件的绝对路径写入到目的文件当中
/** * File文件综合应用 * 需求:获取指定目录下面,指定扩展名的文件,将文件的绝对路径写到文本文件当中. * * 思路:1.需要深度遍历.--递归 * 2.遍历的过程中过滤指定扩展名的文件 ...
- C#路径中获取文件全路径、目录、扩展名、文件名称
C#路径中获取文件全路径.目录.扩展名.文件名称常用函数 需要引用System.IO 直接可以调用Path的静态方法 class Program { static void Main(string[] ...
- C# 选择文件、选择文件夹、打开文件(或者文件夹) 路径中获取文件全路径、目录、扩展名、文件名称 追加、拷贝、删除、移动文件、创建目录 修改文件名、文件夹名!!
https://www.cnblogs.com/zhlziliaoku/p/5241097.html 1.选择文件用OpenDialog OpenFileDialog dialog = new Ope ...
- 【转】C#路径中获取文件全路径、目录、扩展名、文件名称
C#路径中获取文件全路径.目录.扩展名.文件名称 原文链接:https://www.cnblogs.com/JiYF/p/6879139.html 常用函数 需要引用System.IO 直接可以调 ...
- 使用扩展名获取mimetype
在Android中很多时候我们需要计算出文件的mimetype,而我们通常的思路就是通过扩展名来获取对应的mimetype,而如果自行处理,将维护一个比较大的映射表,而实际上大可不必,Android提 ...
- Excel无法打开文件xxx.xlsx,因为文件格式或文件扩展名无效。请确定文件未损坏,并且文件扩展名与文件的格式匹配
office版本:2016 系统版本:win10 问题描述: 1.桌面新建excel表格后,打开时,提示“Excel无法打开文件xxx.xlsx,因为文件格式或文件扩展名无效.请确定文件未损坏,并且文 ...
- Visual C++ 编译器自动假定带 .C 扩展名的文件是 C 文件而不是 C++ 文件,并且拒绝 C++ 语法和关键字(c语言只能在大括号最前面申明变量)
今天在编译OpenGL红宝书附带源码中的light.c文件时遇到一个诡异的问题: 如图light .c,在不做任何修改的情况编译OK.然而只要在某些地方写了可执行代码,则会无法通过编译器编译! (这几 ...
随机推荐
- 2019-03-19 SQL Server简单存储过程的创建 删除 执行
--创建名为 Get 的有输入参数的存储过程 create proc Get --设置默认值 @TrustId int ='001' as begin select * from [DealStruc ...
- js本地对象——Date()
Date()是JavaScript的本地对象,用于获取当前的时间,包括年.月.日.时.分.秒,可以精确到毫秒级:该对象返回的是UTC 协调世界时(Coordinated Universal Time) ...
- SQL SERVER-约束
NOT NULL - 指示某列不能存储 NULL 值. UNIQUE - 保证某列的每行必须有唯一的值. PRIMARY KEY - NOT NULL 和 UNIQUE 的结合.确保某列(或两个列多个 ...
- 树莓派学习笔记—— 源码方式安装opencv
0.前言 本文介绍怎样在树莓派中通过编译源码的方式安装opencv,并通过一个简单的样例说明怎样使用opencv. 很多其它内容请參考--[树莓派学习笔记--索引博文] 1.下载若干依 ...
- cocos2d-js 热更新具体解释(一)
本文将会具体解说cocos2d-js下的热更新机制.这篇内容先给大家介绍一下两个manifest文件就当热身了. 首先介绍project.manifest: 举个样例 { "package ...
- 2015级C++第2周实践项目
[项目1 - 宣告"主权"] 你已经是CSDN博客主了,用IT人特有的方式,编一段程序.在屏幕上输出你想说的话.按要求公布博文,作为我们的开山之作. [项目2 - 胖子不想说体重] ...
- 16、sockect
一.局域网因特网 服务器是指提供信息的计算机或程序,客户机是指请求信息的计算机或程序,而网络用于连接服务器与客户机,实现两者之间的通信.但有时在某个网络中很难将服务器和客户机区分开.我们通常说的“局域 ...
- 初始化的数值(int、double等)(一)
首先考虑一个具有几个构造函数的MyClass类.如果我们决定在这个类的私有部分加入一个新的数据成员,称为int_data_: class MyClass { public: MyClass() : i ...
- Hadoop实战:使用Combiner提高Map/Reduce程序效率
好不easy算法搞定了.小数据測试也得到了非常好的结果,但是扔到进群上.挂上大数据就挂了.无休止的reduce不会结束了. .. .. .... .. ... .. ================= ...
- win10+ubuntu双系统卸载ubuntu
进入win10下载EasyUEFI,删除ubuntu的引导项.重启如果直接进入了win10,表示卸载成功了.然后可以格式化ubuntu的分区.