Qt之QFileIconProvider(根据扩展名获取文件图标、类型)

简介: 简述在Qt之QFileIconProvider一节中已经讲解关于如何获取文件图标与类型。但只仍针对本地已存在的文件,此节,我们主要运用前面分享的内容,讲述如何通过任意后缀或本地不存在的文件来获取相关的图标与类型。简述步骤示例效果源码更多参考步骤因为Qt本身并没有提供对于不存在文件获取图标、类型的接口,所以我们只能另寻出路。

简述

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);
}

更多参考

目录
相关文章
|
5月前
|
存储 Linux C语言
(2)Qt中的字符串类型
本文介绍了Qt中的字符串类型QByteArray和QString,包括它们的构造函数、数据操作方法、查找操作、遍历操作以及与其他类型之间的转换,并解释了它们之间的区别。
293 5
(2)Qt中的字符串类型
|
7月前
QT 软件打包为一个单独可执行.exe文件流程
QT 软件打包为一个单独可执行.exe文件流程
1149 0
|
7月前
【qt】如何读取文件并拆分信息?
【qt】如何读取文件并拆分信息?
78 0
|
7月前
|
安全 C++ Windows
Windows下C++使用gRPC(Qt和VS,含文件包和使用方法)
Windows下C++使用gRPC(Qt和VS,含文件包和使用方法)
|
7月前
|
存储 算法 C++
【C++】C++ QT实现Huffman编码器与解码器(源码+课程论文+文件)【独一无二】
【C++】C++ QT实现Huffman编码器与解码器(源码+课程论文+文件)【独一无二】
183 4
|
7月前
【Qt 学习笔记】Qt窗口 | 标准对话框 | 文件对话框QFileDialog
【Qt 学习笔记】Qt窗口 | 标准对话框 | 文件对话框QFileDialog
1235 4
|
7月前
|
XML 开发框架 API
【Qt 学习笔记】QWidget的windowTitle属性 | windowIcon属性 | qrc文件机制
【Qt 学习笔记】QWidget的windowTitle属性 | windowIcon属性 | qrc文件机制
316 1
|
8月前
|
C++
基于QT实现的拷贝文件以及实时进度条(简易版)
1.基于按钮或者菜单栏的槽里去写逻辑函数(我这边用的是菜单栏),ui实现的进度条 2.创建两个对象,一个是源文件,一个是目标文件分别用getopenfileName、getsavefileName函数即可。 3.利用QFile类去实现对两个文件的创建,因为QFile中可以获取文件的属性已经读写等。 4.循环的去读取源文件中的数据,然后写入目标文件
674 6
|
9月前
Qt颜色、文件、字体对话框
Qt颜色、文件、字体对话框