Если у вас нет специальных требований, QMimeDatabase
является лучшим выбором для ваших потребностей. Я рекомендую вам попробовать ответ @ nitro2005. Вы можете выполнить эту работу вручную, используя QFileIconProvider
.
Если вы хотите сделать эту работу своей рукой, но по какой-то причине вы не можете использовать QMimeDatabase
, есть решение для Linux/X11. Вы можете использовать QFileInfo(const QString &file)
, чтобы получить суффикс/расширение файла (нет необходимости в QString, который вы передали в конструктор QFileInfo
, является существующим путем или нет), а затем получить форму типа MIME, которая суффикс, наконец, вы можете получить QIcon на используя QIcon::fromTheme
и все готово.
Например, следующий код будет проверять, является ли суффикс файла «.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 icon naming spec.
Просто маленький отзыв производительности. Если вам нужно предоставить эти значки очень часто, создайте один локальный экземпляр QFileIconProvider. Конструкция QFileIconProvider тяжелая –