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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Превью файлов на выборе  (Прочитано 7461 раз)
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« : Декабрь 31, 2014, 16:57 »

Добрый день

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

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

Спасибо 
Записан
PimenS
Крякер
****
Offline Offline

Сообщений: 371


Просмотр профиля
« Ответ #1 : Январь 05, 2015, 11:20 »

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

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

Сообщений: 11445


Просмотр профиля
« Ответ #2 : Январь 05, 2015, 11:45 »

На винде 7 QFileDialog открывает виндовый выбор файлов. И превью там нормально работает, если конечно установлены программы просмотра, excel, word, кодеки для видео и т.п.
Я в этом не сомневаюсь, вот и спрашиваю как/где установить мою "программу просмотра" для моих файлов
Записан
PimenS
Крякер
****
Offline Offline

Сообщений: 371


Просмотр профиля
« Ответ #3 : Январь 05, 2015, 12:11 »

Т.е. твои файлы нельзя просмотреть стандартными средствами?
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #4 : Январь 05, 2015, 12:22 »

Т.е. твои файлы нельзя просмотреть стандартными средствами?
Нет, нельзя
Записан
Hrundel
Гость
« Ответ #5 : Январь 05, 2015, 16:42 »

Писать свой OpenFileDialog со встроенной "гляделкой"
Столько же времени потратишь, пока будешь комбинацию нативов искать.
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #6 : Январь 06, 2015, 06:54 »

Писать свой OpenFileDialog со встроенной "гляделкой"
Столько же времени потратишь, пока будешь комбинацию нативов искать.
Повторюсь
Подобные бодрые предложения основываются на том что диалог - всего лишь "панельки/кнопочки" которые легко нахрюкать в любой приличной либе. В действительности это даже не 10% работы. Как-то в 90-х думали также, и связались на свою голову - НИКОГДА больше!!
Записан
Kurles
Бывалый
*****
Offline Offline

Сообщений: 480



Просмотр профиля
« Ответ #7 : Январь 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);
   }
}
 
 
Записан

Код
C++ (Qt)
while(!asleep()) sheep++;
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #8 : Январь 06, 2015, 13:47 »

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

Сообщений: 4747



Просмотр профиля WWW
« Ответ #9 : Январь 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)
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
mitrich
Гость
« Ответ #10 : Январь 07, 2015, 11:08 »

IPreviewHandler - это для Vista и выше. Если нужна поддержка 2000/XP - нужно реализовывать IExtractImage.
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #11 : Январь 07, 2015, 11:51 »

Чуда не случилось, легкого пути на Вындоуз нет Плачущий Все равно спасибо за наводку

IPreviewHandler - это для Vista и выше. Если нужна поддержка 2000/XP - нужно реализовывать IExtractImage.
Интересует Win7 и выше
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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