分享

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

 tianht 2015-05-12
    在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续(获取文件图标、类型)

注:
    技术在于交流、沟通,转载请注明出处并保持作品的完整性。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多