Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: AlekseyK от Октябрь 05, 2010, 02:56



Название: Имя типа файла
Отправлено: 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 ) Иконки выдаёт почему-то корректные - как зарегистрировано в системе, а тип - нет.

Есть ли решение, желательно кроссплатформенное, как можно получить зарегистрированные типы файлов?


Название: Re: Имя типа файла
Отправлено: AlekseyK от Октябрь 05, 2010, 03:07
А что за зверь QMimeType и QContent в [QtBaseModule (http://doc.qt.nokia.com/qtextended4.4/qtbasemodule.html)] и почему его только в embedded использовать можно? И почему есть версия только для 4.4?


Название: Re: Имя типа файла
Отправлено: crossly от Октябрь 05, 2010, 09:00
потому что эти классы разрабатывались под определенную среду..кроссплатформенного решения нету... для вин использовать winapi ... для *nix http://freedesktop.org (http://freedesktop.org)


Название: Re: Имя типа файла
Отправлено: ufna от Октябрь 05, 2010, 09:23
Ну насчет зарегистрированных не знаю, чтобы прям вот списком

а так- через QFileInfo получить расширение легко.


Название: Re: Имя типа файла
Отправлено: AlekseyK от Октябрь 05, 2010, 12:08
потому что эти классы разрабатывались под определенную среду..кроссплатформенного решения нету... для вин использовать winapi ...
Наверное так и сделаем.

Цитировать
для *nix http://freedesktop.org (http://freedesktop.org)
А ссылочка есть на решение? Спасибо.

Цитировать
а так- через QFileInfo получить расширение легко.
Это мы знаем, но этого мало - нужно описание (имя) типа. Спасибо.


Название: Re: Имя типа файла
Отправлено: Igors от Октябрь 05, 2010, 12:14
Просто доп. информация: на Mac платформе каждый файл имеет тип и creator (оба 4 байта) и, в общем случае, с расширением это никак не связано. 


Название: Re: Имя типа файла
Отправлено: crossly от Октябрь 05, 2010, 14:15
http://www.freedesktop.org/wiki/Specifications/shared-mime-info-spec (http://www.freedesktop.org/wiki/Specifications/shared-mime-info-spec) либо посмотри утилиту file


Название: Re: Имя типа файла
Отправлено: AlekseyK от Октябрь 05, 2010, 16:02
Благодарю.


Название: Re: Имя типа файла
Отправлено: AlekseyK от Октябрь 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 не вставила для типов такой простой кусок кода (только для иконок почему-то), но надеюсь они это исправят в ближайших выпусках.