Russian Qt Forum
Ноябрь 25, 2024, 01:44 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Имя типа файла  (Прочитано 7390 раз)
AlekseyK
Гость
« : Октябрь 05, 2010, 02:56 »

Можно ли в Qt получить имя типа файла? Через QFileIconProvider::type(QFileInfo ) можно получить описания типа:

- png file
- doc file
- pdf file

а не:

- PNG Image
- MS Word (или OpenOffice) document
- PDF document

как в проводнике. QFileIconProvider::icon(QFileInfo ) Иконки выдаёт почему-то корректные - как зарегистрировано в системе, а тип - нет.

Есть ли решение, желательно кроссплатформенное, как можно получить зарегистрированные типы файлов?
Записан
AlekseyK
Гость
« Ответ #1 : Октябрь 05, 2010, 03:07 »

А что за зверь QMimeType и QContent в [QtBaseModule] и почему его только в embedded использовать можно? И почему есть версия только для 4.4?
Записан
crossly
Гость
« Ответ #2 : Октябрь 05, 2010, 09:00 »

потому что эти классы разрабатывались под определенную среду..кроссплатформенного решения нету... для вин использовать winapi ... для *nix http://freedesktop.org
Записан
ufna
Гость
« Ответ #3 : Октябрь 05, 2010, 09:23 »

Ну насчет зарегистрированных не знаю, чтобы прям вот списком

а так- через QFileInfo получить расширение легко.
Записан
AlekseyK
Гость
« Ответ #4 : Октябрь 05, 2010, 12:08 »

потому что эти классы разрабатывались под определенную среду..кроссплатформенного решения нету... для вин использовать winapi ...
Наверное так и сделаем.

Цитировать
А ссылочка есть на решение? Спасибо.

Цитировать
а так- через QFileInfo получить расширение легко.
Это мы знаем, но этого мало - нужно описание (имя) типа. Спасибо.
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #5 : Октябрь 05, 2010, 12:14 »

Просто доп. информация: на Mac платформе каждый файл имеет тип и creator (оба 4 байта) и, в общем случае, с расширением это никак не связано. 
Записан
crossly
Гость
« Ответ #6 : Октябрь 05, 2010, 14:15 »

http://www.freedesktop.org/wiki/Specifications/shared-mime-info-spec либо посмотри утилиту file
Записан
AlekseyK
Гость
« Ответ #7 : Октябрь 05, 2010, 16:02 »

Благодарю.
Записан
AlekseyK
Гость
« Ответ #8 : Октябрь 07, 2010, 20:39 »

Вот решение для Windows, если кому надо:

Код
C++ (Qt)
#ifndef WINDOWSFILETYPE_H
#define WINDOWSFILETYPE_H
 
#include <QString>
 
// Helper class to get Windows OS file type usin winapi
// as Qt does not provide SHGetFileInfo() function call wrapper
// for this purpose for now (only for file associated icons)
class WindowsFileType
{
public:
   WindowsFileType();
   QString getFileType(QString name);
};
 
#endif // WINDOWSFILETYPE_H
 

Код
C++ (Qt)
#include "windowsfiletype.h"
 
#if defined(Q_WS_WIN)
#include <QDir>
#include <windows.h>
 
WindowsFileType::WindowsFileType()
{
 
}
 
QString WindowsFileType::getFileType(QString fileName)
{
   SHFILEINFO sfi;
 
   SHGetFileInfo(
           (LPCTSTR)(const wchar_t *)QDir::toNativeSeparators(fileName).utf16(),
           FILE_ATTRIBUTE_NORMAL,
           &sfi,
           sizeof(SHFILEINFO),
           SHGFI_TYPENAME | SHGFI_USEFILEATTRIBUTES);
 
   return QString::fromWCharArray(sfi.szTypeName);
}
 
#endif // Q_WS_WIN
 

Странно, что Qt не вставила для типов такой простой кусок кода (только для иконок почему-то), но надеюсь они это исправят в ближайших выпусках.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.138 секунд. Запросов: 23.