时间:2011-01-06 17:52:35

标签: qt user-interface qt4 icons

3 个答案:

答案 0 :(得分:8)

答案 1 :(得分:0)

从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;
}

答案 2 :(得分:0)

如果您没有特殊要求,QMimeDatabase是您需要的更好选择。我建议你试试@ nitro2005的回答。您仍然可以使用QFileIconProvider来完成这项工作。

如果您想手工完成这项工作,但由于某些原因您无法使用QMimeDatabase,则可以使用适用于Linux / X11的解决方案。你可以使用QFileInfo(const QString &file)来获取文件的后缀/扩展名(你传递给QFileInfo构造函数的QString不是必需的,是否存在),然后获取后缀的MIME类型表单,最后您可以使用QIcon::fromTheme获取QIcon并完成。

例如,以下代码将检查文件的后缀是否为&#34; .bin&#34;,如果是,则使用&#34; application-x-为系统主题添加一个图标可执行&#34; MIME类型。事实上,它只是由你自己维护一个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)));
}

要获取&#34; MIME数据库&#34;的MIME类型字符串引用,请结帐freedesktop icon naming spec