zoukankan      html  css  js  c++  java
  • Qt之QFileIconProvider(根据扩展名获取文件图标、类型)

    简述

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

    步骤

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

    更多参考

  • 相关阅读:
    Serveral effective linux commands
    Amber learning note A8: Loop Dynamics of the HIV-1 Integrase Core Domain
    amber初学……
    anaconda使用
    python中的一些语法
    python中的OOP
    python中的模块
    将python程序打包成exe
    python-执行过程
    python基础
  • 原文地址:https://www.cnblogs.com/itrena/p/5938290.html
Copyright © 2011-2022 走看看