QT5获取系统文件图标,文件路径

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了QT5获取系统文件图标,文件路径相关的知识,希望对你有一定的参考价值。

获取系统图标:

QFileIconProvider icon_provider;
QIcon icon = icon_provider.icon(QFileIconProvider::Folder);

其中可以获取的系统图标有:

Constant                                Value
QFileIconProvider::Computer               0
QFileIconProvider::Desktop                1
QFileIconProvider::Trashcan               2
QFileIconProvider::Network                3
QFileIconProvider::Drive                  4
QFileIconProvider::Folder                 5
QFileIconProvider::File                   6

获取文件图标/文件类型:

QFileInfo file_info(name);
QFileIconProvider icon_provider;
QIcon icon = icon_provider.icon(file_info);
/QString type = icon_provider.type(file_info);

注:该方法只可以获取系统的本地图标和本地文件类型。要通过扩展名来获取图标需要创建临时文件,但不适用大量文件虚拟。

步骤:
  • 通过扩展名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; 
}

参考:http://blog.sina.com.cn/s/blog_a6fb6cc90101h2ew.html

以上是关于QT5获取系统文件图标,文件路径的主要内容,如果未能解决你的问题,请参考以下文章

QT5.5.0版本添加icon图标步骤

Android:如何在状态栏中获取电池图标资源 ID 或完整文件路径/名称?

vs2019源码编译qt5.16失败

在Delphi中使用系统对应文件类型的图标

Qt5 (Linux/LXDE) 中不显示系统托盘图标

请教QT5的移植问题