如何获取给定文件扩展名的 Qt 图标(QIcon)

问题描述 投票:0回答:3

我正在开发一个应用程序,需要显示与不同文件类型关联的图标
例如,对于 .doc 扩展,我需要它能够显示 Microsoft Word 图标

问题:

如何使用 QT sdk 从系统中获取 QIcon

谢谢。

qt user-interface qt4 icons
3个回答
12
投票

使用 QFileIconProvider 类。


3
投票

从 Qt5 开始,使用 QMimeDatabase:

QMimeDatabase mime_database;

QIcon icon_for_filename(const QString &filename)
{
  QIcon icon;
  QList<QMimeType> mime_types = mime_database.mimeTypesForFileName(filename);
  for (int i=0; i < mime_types.count() && icon.isNull(); i++)
    icon = QIcon::fromTheme(mime_types[i].iconName());

  if (icon.isNull())
    return QApplication::style()->standardIcon(QStyle::SP_FileIcon);
  else
    return icon;
}

0
投票

如果您没有特殊要求,

QMimeDatabase
是您需要的更好选择。我建议你尝试@ninto2005的答案。您仍然可以使用
QFileIconProvider
手动完成这项工作。

如果您想手动完成这项工作,但由于某种原因无法使用

QMimeDatabase
,有一个适用于 Linux/X11 的解决方案。您可以使用
QFileInfo(const QString &file)
获取文件的后缀/扩展名(传递给
QFileInfo
构造函数的 QString 是否存在路径没有必要),然后获取该后缀形式的 MIME 类型,最后即可使用
QIcon::fromTheme
获取 QIcon 即可完成。

例如,以下代码将检查文件的后缀是否为“.bin”,如果是,则为其提供一个来自系统主题且 MIME 类型为“application-x-executable”的图标。其实就是自己维护一个MIME数据库而已。

QString fileName("example.bin");
QFileInfo fi(fileName);
if (fi.suffix().compare(QString("bin")) == 0) {
    item->setIcon(QIcon::fromTheme("application-x-executable",
                                    provider.icon(QFileIconProvider::File)));
}

要获取“MIME 数据库”的 MIME 类型字符串参考,请查看 freedesktop 图标命名规范

© www.soinside.com 2019 - 2024. All rights reserved.