新浪博客

Qt之QFileIconProvider续(获取文件图标、类型)

2013-12-17 16:50阅读:
Qt之QFileIconProvider(获取文件图标、类型)一节中已经讲解关于如何通过扩展名获取文件类型与图标。Qt5开始QPixmap::fromWinHICON(HICON)已经消失得无影无踪,且获取图标、后缀的方法仍针对本地已存在的文件,那么,只能另寻出路,此节讲述如何通过扩展名来创建临时文件,并获取对应的图标、类型。
步骤:
  • 通过扩展名extension(.***)构造临时文件QTemporaryFile
  • 通过QFileIconProvider获取对应的图标、类型
  • 删除临时文件

获取图标


QIcon FileIcon::fileExtensionIcon(const QString & extension) const
{
QFileIconProvider icon_provider;
QIcon icon;
QTemporaryFile tmp_file(QDir::tempPath() + QDir::separator() +
QCoreApplication::applicationName() + '_XXXXXX' + extension);
tmp_file.setAutoRemove(false);
if(tmp_file.open())
{
QString file_name = tmp_file.fileName();
tmp_file.write(QByteArray());
tmp_file.close();
icon = icon_provider.icon(QFileInfo(file_name));
tmp_file.remove();
}
else
{
qCritical()<<QString('failed to write temporary file %1') .arg(tmp_file.fileName());
}
return icon;
}
获取类型


QString FileIcon::fileExtensionType(const QString & extension) const
{
QFileIconProvider icon_provider;
QString type;
QTemporaryFile tmp_file(QDir::tempPath() + QDir::separator() +
QCoreApplication::applicationName() + '_XXXXXX' + extension);
tmp_file.setAutoRemove(false);
if(tmp_file.open())
{
QString file_name = tmp_file.fileName();
tmp_file.write(QByteArray());
tmp_file.close();
type = icon_provider.type(QFileInfo(file_name));
tmp_file.remove();
}
else
{
qCritical()<<QString('failed to write temporary file %1') .arg(tmp_file.fileName());
}
return type;
}
效果如下:
Qt之QFileIconProvider续(获取文件图标、类型)
Qt之QFileIconProvider续(获取文件图标、类型)
注:
技术在于交流、沟通,转载请注明出处并保持作品的完整性。
作者:╰☆奋斗ing❤孩子` 原文:http://blog.sina.cn/dpool/blog/s/blog_a6fb6cc90101h2ew.html?vt=4

我的更多文章

下载客户端阅读体验更佳

APP专享