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

时间: 2024-10-06 04:36:29

QT5获取系统文件图标,文件路径的相关文章

C# Winform中如何获取文件名与文件路径

获取文件名方法: 用System.IO.Path.GetFileName和System.IO.Path.GetFileNameWithoutExtension(无扩展名)的方法 获取文件路径方法: //获取当前进程的完整路径,包含文件名(进程名).string str = this.GetType().Assembly.Location;result: X:\xxx\xxx\xxx.exe (.exe文件所在的目录+.exe文件名) //获取新的 Process 组件并将其与当前活动的进程关联的

spring java 获取webapp下文件路径

spring java 获取webapp下文件路径 @RequestMapping("/act/worldcup_schedule_time/imgdownload") @ResponseBody public String scheduleDownload(HttpServletRequest request, HttpServletResponse response, HttpSession session) { response.setCharacterEncoding(&quo

四种方法获取可执行程序的文件路径(.NET Core / .NET Framework)

原文:四种方法获取可执行程序的文件路径(.NET Core / .NET Framework) 本文介绍四种不同的获取可执行程序文件路径的方法.适用于 .NET Core 以及 .NET Framework. 本文内容 使用程序集信息获取 使用应用程序域信息获取 使用进程信息获取 使用命令行参数获取 总结靠谱的方法 另外,关于以上方法的性能对比,你可以参阅林德熙的博客:[dotnet 获取路径各种方法的性能对比](https://blog.lindexi.com/post/dotnet-%E8%

java获取src下文件路径和获取webRoot下文件路径

获取src下的fileurl.properties文件路径 this.getClass().getResource("/fileurl.properties").getPath() 获取webRoot下的service文件夹路径 request.getSession().getServletContext().getRealPath("/service");

iOS 获取沙盒文件路径及 写入/删除 沙盒文件

出于安全考虑,iOS系统的沙盒机制规定每个应用都只能访问当前沙盒目录下面的文件(也有例外,比如系统通讯录能在用户授权的情况下被第三方应用访问),这个规则把iOS系统的封闭性展现的淋漓尽致. 一.沙盒中几个主要的目录 每个沙盒下面都有相似的目录结构,如下图所示(出自苹果官方文档): 每个应用的沙盒目录都是相似的,主要包含图中所示的4个目录: 1.MyApp.app ①存放内容 该目录包含了应用程序本身的数据,包括资源文件和可执行文件等.程序启动以后,会根据需要从该目录中动态加载代码或资源到内存,这

Tomcat --获取上传文件路径

最近做工程时,用到了上传下载文件,详见java--文件上传与下载. 需求:上传的文件可以放在任何服务器上(即不同的IP),然后在不同的地方可以访问. 备注:如果直接将上传的文件放在自己服务器的tomcat的webapp文件下,那么开启tomcat时,任何地方便可以直接访问. 如下是图片存放位置,即存放在tomcat的webapps下 访问路径如下 http://192.168.2.67:8080/asf-logo.png 前面是我的主机ip和端口,后面是图片的文件名 现在的需求改为:上传的图片没

C#中OpenFileDialog获取文件名和文件路径的常用方法

System.IO.Path.GetFullPath(openFileDialog1.FileName);                             //绝对路径 System.IO.Path.GetExtension(openFileDialog1.FileName);                          //文件扩展名 System.IO.Path.GetFileNameWithoutExtension(openFileDialog1.FileName);//文件

C#根据字体名通过注册表获取该字体文件路径(win10)

方法一: 直接先上源码: private System.Collections.Generic.SortedDictionary<string, string> ReadFontInformation() { var dictionary = new System.Collections.Generic.SortedDictionary<string, string>(); Microsoft.Win32.RegistryKey localMachineKey = Microsof

ie下获取上传文件全路径

ie下获取上传文件全路径,3.5之后的火狐是没法获取上传文件全路径的 1 /*获取上传文件路径*/ 2 function getFilePath(obj) { 3 var form = $(this).parents("form"); 4 form.validate(); 5 var fileObj = obj; 6 if (fileObj) { 7 if (window.navigator.userAgent.indexOf("MSIE") >= 1) {