Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: Igors от Декабрь 31, 2014, 16:57



Название: Превью файлов на выборе
Отправлено: Igors от Декабрь 31, 2014, 16:57
Добрый день

Приложение показывает картинку (или просто текст) для "своих" файлов прямо в системном диалоге выбора файлов. В связи с тем что ОС(ы) периодически обновляют файловые диалоги - поддержка этой фичи очень затратна/нерентабельна. Напр QFileDialog нельзя "кастомизировать".  Но превью нужно, нельзя ли его организовать др средствами? Ну показывает же ОС картинки .jpg .png и др в одном из режимов просмотра.

На OSX есть что-то вроде QuickLook (не изучал но точно это возможно). А вот что на Вындоуз? Это ввергает меня в пучину COM'а, нырянию в помойную яму реестра и.т.п? Или все не так уж страшно? Или свершится чудо и есть кросс-платформенное решение? (ну а вдруг!!). Кто сталкивался - поделитесь опытом.

Спасибо 


Название: Re: Превью файлов на выборе
Отправлено: PimenS от Январь 05, 2015, 11:20
А вот что на Вындоуз? Это ввергает меня в пучину COM'а, нырянию в помойную яму реестра и.т.п? Или все не так уж страшно? Или свершится чудо и есть кросс-платформенное решение? (ну а вдруг!!).

На винде 7 QFileDialog открывает виндовый выбор файлов. И превью там нормально работает, если конечно установлены программы просмотра, excel, word, кодеки для видео и т.п.


Название: Re: Превью файлов на выборе
Отправлено: Igors от Январь 05, 2015, 11:45
На винде 7 QFileDialog открывает виндовый выбор файлов. И превью там нормально работает, если конечно установлены программы просмотра, excel, word, кодеки для видео и т.п.
Я в этом не сомневаюсь, вот и спрашиваю как/где установить мою "программу просмотра" для моих файлов


Название: Re: Превью файлов на выборе
Отправлено: PimenS от Январь 05, 2015, 12:11
Т.е. твои файлы нельзя просмотреть стандартными средствами?


Название: Re: Превью файлов на выборе
Отправлено: Igors от Январь 05, 2015, 12:22
Т.е. твои файлы нельзя просмотреть стандартными средствами?
Нет, нельзя


Название: Re: Превью файлов на выборе
Отправлено: Hrundel от Январь 05, 2015, 16:42
Писать свой OpenFileDialog со встроенной "гляделкой"
Столько же времени потратишь, пока будешь комбинацию нативов искать.


Название: Re: Превью файлов на выборе
Отправлено: Igors от Январь 06, 2015, 06:54
Писать свой OpenFileDialog со встроенной "гляделкой"
Столько же времени потратишь, пока будешь комбинацию нативов искать.
Повторюсь
Подобные бодрые предложения основываются на том что диалог - всего лишь "панельки/кнопочки" которые легко нахрюкать в любой приличной либе. В действительности это даже не 10% работы. Как-то в 90-х думали также, и связались на свою голову - НИКОГДА больше!!


Название: Re: Превью файлов на выборе
Отправлено: Kurles от Январь 06, 2015, 08:25
Хак для 4.7+:

filepreviewdialog.h

Код
C++ (Qt)
#ifndef FILEPREVIEWDIALOG_H
#define FILEPREVIEWDIALOG_H
 
#include <QFileDialog>
#include <QLabel>
#include <QSplitter>
#include <QPixmap>
 
class FilePreviewDialog : public QFileDialog
{
   Q_OBJECT
public:
   explicit FilePreviewDialog (QWidget *parent = 0);
   ~FilePreviewDialog ();
 
private:
   void init();
   QLabel *_preview;
 
signals:
 
public slots:
 
private slots:
   void fileChanged(const QString &file);
 
};
 
#endif // FILEPREVIEWDIALOG_H
 

filepreviewdialog.cpp

Код
C++ (Qt)
#include "filepreviewdialog.h"
 
FilePreviewDialog::FilePreviewDialog(QWidget *parent) :
   QFileDialog(parent)
{
   init();
}
 
FilePreviewDialog::~FilePreviewDialog()
{
   if (_preview) delete _preview;
}
 
void FilePreviewDialog::init()
{
   _preview = 0;
   QSplitter *splitter = findChild<QSplitter*>("splitter");
   if (splitter == 0)
   {
       return;
   }
 
   _preview = new QLabel();
   QRect geomerty = _preview->geometry();
   geomerty.setWidth(128); // Настройки геометрии, можно так же сделать что бы рамочка отображалась или что-то вроде
   _preview->setGeometry(geomerty);
 
   splitter->addWidget(_preview); // Собсвенно, добавляем наш виджет в контейнер
 
   // подключаем обработчик сигнала currentChanged
   connect(this, SIGNAL(currentChanged(QString)),
           this, SLOT(fileChanged(QString)));
 
   _preview->setAlignment(Qt::AlignVCenter | Qt::AlignHCenter);
}
 
void FilePreviewDialog::fileChanged(const QString &file)
{
   if (_preview == 0)
   {
       return;
   }
 
   QPixmap pix(file);
   if (pix.isNull())
   {
       _preview->setPixmap(QPixmap());
       _preview->setText(trUtf8("Отсутствует"));
   }
   else
   {
       // Не зыбываем масштабировать изображение к размеру нашей области просмотра
       _preview->setText("");
       QSize size = _preview->size();
       pix = pix.scaled(size, Qt::KeepAspectRatio);
       _preview->setPixmap(pix);
   }
}
 
 


Название: Re: Превью файлов на выборе
Отправлено: Igors от Январь 06, 2015, 13:47
Хак для 4.7+:
С небольшими доделками работает и под 5.4  :) К сожалению, есть, ну скажем, "продвинутые пользователи".  Реакция на предложенную (вполне приличную) реализацию будет примерно:
Цитировать
Таак, не понял. А где же поиск по дискам ???  Не реализовано? А когда будет? А вот у др приложений давно все есть!.. Нет, вы посмотрите, посмотрите..
Или так
Цитировать
Ребята!!! (ненавижу это слово) ГДЕ сетевые диски ??? ??? Ну так нельзя, это несерьезно!!!
И еще много таких вариантов  :) Единственный способ это пресечь - нативный диалог, но его кастомизация очень затратна. Поразмыслив мы решили перенести все бубочки из файловых диалогов в дополнительные - терпимо. Но вот превью не вынести, это надо как-то решать


Название: Re: Превью файлов на выборе
Отправлено: kambala от Январь 06, 2015, 21:51
http://msdn.microsoft.com/en-us/library/bb776867%28VS.85%29.aspx (настекал отсюда http://stackoverflow.com/questions/617927/how-do-i-get-windows-explorer-to-show-a-preview-of-my-files-in-thumbnail-view)


Название: Re: Превью файлов на выборе
Отправлено: mitrich от Январь 07, 2015, 11:08
IPreviewHandler - это для Vista и выше. Если нужна поддержка 2000/XP - нужно реализовывать IExtractImage.


Название: Re: Превью файлов на выборе
Отправлено: Igors от Январь 07, 2015, 11:51
http://msdn.microsoft.com/en-us/library/bb776867%28VS.85%29.aspx (настекал отсюда http://stackoverflow.com/questions/617927/how-do-i-get-windows-explorer-to-show-a-preview-of-my-files-in-thumbnail-view)
Чуда не случилось, легкого пути на Вындоуз нет :'( Все равно спасибо за наводку

IPreviewHandler - это для Vista и выше. Если нужна поддержка 2000/XP - нужно реализовывать IExtractImage.
Интересует Win7 и выше