博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Qt之QFileIconProvider(根据扩展名获取文件图标、类型)
阅读量:5347 次
发布时间:2019-06-15

本文共 2519 字,大约阅读时间需要 8 分钟。

简述

在一节中已经讲解关于如何获取文件图标与类型。但只仍针对本地已存在的文件,此节,我们主要运用前面分享的内容,讲述如何通过任意后缀或本地不存在的文件来获取相关的图标与类型。

步骤

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

更多参考

转载于:https://www.cnblogs.com/itrena/p/5938290.html

你可能感兴趣的文章
线程安全问题
查看>>
linux的子进程调用exec( )系列函数
查看>>
MySQLdb & pymsql
查看>>
zju 2744 回文字符 hdu 1544
查看>>
【luogu P2298 Mzc和男家丁的游戏】 题解
查看>>
前端笔记-bom
查看>>
上海淮海中路上苹果旗舰店门口欲砸一台IMAC电脑维权
查看>>
Google透露Android Market恶意程序扫描服务
查看>>
给mysql数据库字段值拼接前缀或后缀。 concat()函数
查看>>
迷宫问题
查看>>
【FZSZ2017暑假提高组Day9】猜数游戏(number)
查看>>
泛型子类_属性类型_重写方法类型
查看>>
对闭包的理解
查看>>
练习10-1 使用递归函数计算1到n之和(10 分
查看>>
Oracle MySQL yaSSL 不明细节缓冲区溢出漏洞2
查看>>
Code Snippet
查看>>
zoj 1232 Adventure of Super Mario
查看>>
组合数学 UVa 11538 Chess Queen
查看>>
oracle job
查看>>
Redis常用命令
查看>>