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

更多参考

目录
相关文章
|
1月前
|
计算机视觉 数据格式
使用opencv在Qt控件上播放mp4文件
使用opencv在Qt控件上播放mp4文件
59 2
|
1月前
【QT】创建、打开QT项目只显示.pro文件的问题解决
【QT】创建、打开QT项目只显示.pro文件的问题解决
203 0
|
1月前
|
存储 C++
基于Qt的简易文件压缩与解压缩工具设计与实现
基于Qt的简易文件压缩与解压缩工具设计与实现
56 1
|
1月前
|
监控 安全 Linux
Qt 文件类实战:解锁文件操作的无限可能
Qt 文件类实战:解锁文件操作的无限可能
69 1
|
1月前
|
Windows
Qt 目录操作(QDir 类)及展示系统文件实战 & QFilelnfo 类介绍和获取文件属性项目实战
Qt 目录操作(QDir 类)及展示系统文件实战 & QFilelnfo 类介绍和获取文件属性项目实战
Qt 目录操作(QDir 类)及展示系统文件实战 & QFilelnfo 类介绍和获取文件属性项目实战
|
1月前
|
XML 数据可视化 程序员
Qt 中的项目文件解析和命名规范
Qt 中的项目文件解析和命名规范
|
1月前
|
存储 JSON C++
Qt cmake 增加qml文件:深度剖析Qt cmake 的qt_add_qml_module函数
Qt cmake 增加qml文件:深度剖析Qt cmake 的qt_add_qml_module函数
78 0
|
1月前
|
开发框架 前端开发 算法
【Qt App 编译 】Qt Cmake 资源文件的加载:如何使用 CMakeLists.txt 文件和资源文件
【Qt App 编译 】Qt Cmake 资源文件的加载:如何使用 CMakeLists.txt 文件和资源文件
68 0
|
1月前
|
监控 C++
C++ Qt开发:QFileSystemWatcher文件监视组件
QFileSystemWatcher 是 Qt 框架中提供的一个类,用于监视文件系统中的文件和目录的变化。它允许你在文件或目录发生变化时接收通知,并可以用于监视文件的创建、删除、重命名以及内容修改等操作。这对于需要实时监控文件系统变化的应用程序是非常有用的。
55 5
C++ Qt开发:QFileSystemWatcher文件监视组件
|
1月前
|
IDE 开发工具
QT案例IDE编写 -- 新建和保存文件及退出程序
QT案例IDE编写 -- 新建和保存文件及退出程序
36 0