简述

在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(根据扩展名获取文件图标、类型)的更多相关文章

  1. Qt之根据扩展名获取文件图标、类型

    简述 在C++根据扩展名获取文件图标.类型一节中我们分享了如何根据扩展名来获取对应的文件图标.类型,下面.我们在Qt中使用它. 简述 示例 效果 源码 更多参考 示例 如下,我们根据扩展名来获取对应的 ...

  2. C++根据扩展名获取文件图标、类型

    简述 在Windows系统中,根据扩展名来区分文件类型,比如:.txt(文本文件)..exe(可执行程序).*.zip(压缩文件),下面,我们来根据扩展名来获取对应的文件图标.类型. 简述 源码 源码 ...

  3. java基础知识回顾之javaIO类--File类应用:获取指定目录下面的指定扩展名的文件,将文件的绝对路径写入到目的文件当中

    /** * File文件综合应用 * 需求:获取指定目录下面,指定扩展名的文件,将文件的绝对路径写到文本文件当中. *  * 思路:1.需要深度遍历.--递归 * 2.遍历的过程中过滤指定扩展名的文件 ...

  4. C#路径中获取文件全路径、目录、扩展名、文件名称

    C#路径中获取文件全路径.目录.扩展名.文件名称常用函数 需要引用System.IO 直接可以调用Path的静态方法 class Program { static void Main(string[] ...

  5. C# 选择文件、选择文件夹、打开文件(或者文件夹) 路径中获取文件全路径、目录、扩展名、文件名称 追加、拷贝、删除、移动文件、创建目录 修改文件名、文件夹名!!

    https://www.cnblogs.com/zhlziliaoku/p/5241097.html 1.选择文件用OpenDialog OpenFileDialog dialog = new Ope ...

  6. 【转】C#路径中获取文件全路径、目录、扩展名、文件名称

    C#路径中获取文件全路径.目录.扩展名.文件名称 原文链接:https://www.cnblogs.com/JiYF/p/6879139.html 常用函数 需要引用System.IO   直接可以调 ...

  7. 使用扩展名获取mimetype

    在Android中很多时候我们需要计算出文件的mimetype,而我们通常的思路就是通过扩展名来获取对应的mimetype,而如果自行处理,将维护一个比较大的映射表,而实际上大可不必,Android提 ...

  8. Excel无法打开文件xxx.xlsx,因为文件格式或文件扩展名无效。请确定文件未损坏,并且文件扩展名与文件的格式匹配

    office版本:2016 系统版本:win10 问题描述: 1.桌面新建excel表格后,打开时,提示“Excel无法打开文件xxx.xlsx,因为文件格式或文件扩展名无效.请确定文件未损坏,并且文 ...

  9. Visual C++ 编译器自动假定带 .C 扩展名的文件是 C 文件而不是 C++ 文件,并且拒绝 C++ 语法和关键字(c语言只能在大括号最前面申明变量)

    今天在编译OpenGL红宝书附带源码中的light.c文件时遇到一个诡异的问题: 如图light .c,在不做任何修改的情况编译OK.然而只要在某些地方写了可执行代码,则会无法通过编译器编译! (这几 ...

随机推荐

  1. [TJOI2015]线性规划

    题目:洛谷P3973.BZOJ3996. 题目大意:给你n,参数b[][]和c[](里面的数均>0),要你求一个数组A[](0/1,1表示选择),已知:1. 若同时选择X和Y,获得B[x][y] ...

  2. axios统一拦截配置

    在vue项目中,和后台进行数据交互使用axios.要想统一处理所有的http请求和响应,就需要使用axios的拦截器.通过配置http response inteceptor 统一拦截后台的接口数据, ...

  3. oracle 的列转行函数 listagg()

    当你的表X中有A,B两列,数据如下 A B a 1 a 2 a 3 b 1 b 2 b 3 想让数据以 a|1|2|3 , b|1|2|3 格式显示可使用listagg() 1.使用listagg() ...

  4. STM32 USB转串口驱动安装不成功出现黄色感叹号解决方法!

    相信很多人在做USB转串口时出现过串口驱动安装不成功,出现黄色感叹号问题, 出现这种问题一般是驱动安装不成功造成的. 这里我就这个问题总结几个简单的方法. 方法1: 插上USB,利用驱动人生安装驱动. ...

  5. java类的方法

    我前面说的都是类的属性,现在说类的方法: 类{ 属性:“类有什么” 方法:“类能做什么” } 首先我们在之前创建的学生类中添加个打印1-10数字的方法,参数是name package cuteSnow ...

  6. 将maven中央仓库不存在的jar包添加到本地仓库

    这里有2个案例,需要手动发出Maven命令包括一个 jar 到 Maven 的本地资源库. 要使用的 jar 不存在于 Maven 的中心储存库中. 您创建了一个自定义的 jar ,而另一个 Mave ...

  7. Intellij idea 自动完成的变量名称首字母变为小写

    Intellij idea 自动完成的变量名称首字母变为小写 好像没有什么好的自动办法,自己输入一个小写的字母吧,然后Idea会出提示.

  8. java语言中的多态概述

    多态:一个对象相应着不同类型 多态在代码中的体现:父类或接口的引用指向其子类对象. 多态的优点: 提高了代码的扩展性,前期定义的代码能够使用后期的内容. 多态的弊端: 前期定义的内容不能使用后期子类中 ...

  9. 使用excel进行数据挖掘(6)---- 预測

    在配置环境后,能够使用excel进行数据挖掘. 环境配置问题可參阅: http://blog.csdn.net/xinxing__8185/article/details/46445435 例子 DM ...

  10. 夜&#183; 启程

    有写博客的念头,还是在去年的时候. 那天早上我非常兴奋,也非常忐忑.由于我立即要去JD面试.JD大家都知道的,对我这样的没见过世面的人来说.这就是个高高在上殿堂. 结果我的满腔热血.被一张面试题卷给浇 ...