获取系统图标:
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