crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

2 страниц V   1 2 >  
Ответить в данную темуНачать новую тему
> MVC для отбражения изображений
Гость_QBatman_*
сообщение 21.7.2009, 12:03
Сообщение #1





Гости








    


нужно сделать что-то типа вида Thumbnails(эскизы страниц) у explorer'a
т.е. кол-во колонок и строк зависит от размера окна, т.е. при ресайзе прийдётся перестраивать модель, чего делать не хочется.
как правильно сделать?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
ufna
  опции профиля:
сообщение 21.7.2009, 12:34
Сообщение #2


Активный участник
***

Группа: Участник
Сообщений: 362
Регистрация: 24.5.2008
Из: Курган/СПб
Пользователь №: 182

Спасибо сказали: 29 раз(а)




Репутация:   5  


а в чем проблема, т.е. как ты это хочешь реализовывать? Что использовать и т.п.


я делаю через QListWidget, она на автомате менять умеет это все дело.

получаем вот так
Прикрепленное изображение


а вообще - имхо, правильней перестраивать View, а не модель. Все зависит от того, как ты сам организуешь. В модели я бы сделал просто один столбец и все, а во вью - рисовал уже в зависимости от размера вьювера.

Хотя для многих целей подходит способ с QListView/Widget (первое - если не открываешь папку с тяжелыми файлами, второе - если нужно писать более реальное, имхо)

Сообщение отредактировал Admin - 21.7.2009, 13:30
Причина редактирования: поместил картинку после слов "получаем вот так"
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
mozgofil
  опции профиля:
сообщение 21.7.2009, 21:53
Сообщение #3


Студент
*

Группа: Участник
Сообщений: 32
Регистрация: 23.4.2009
Пользователь №: 706

Спасибо сказали: 0 раз(а)




Репутация:   0  


Цитата(ufna @ 21.7.2009, 12:34) *
а вообще - имхо, правильней перестраивать View, а не модель. Все зависит от того, как ты сам организуешь. В модели я бы сделал просто один столбец и все, а во вью - рисовал уже в зависимости от размера вьювера.

действительно, но делать особо ничего не надо:
Цитата
flow : Flow

This property holds which direction the items layout should flow.

If this property is LeftToRight, the items will be laid out left to right. If the isWrapping property is true, the layout will wrap when it reaches the right side of the visible area. If this property is TopToBottom, the items will be laid out from the top of the visible area, wrapping when it reaches the bottom.

т.е. использовать QListView -верная мысль
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
ufna
  опции профиля:
сообщение 21.7.2009, 23:01
Сообщение #4


Активный участник
***

Группа: Участник
Сообщений: 362
Регистрация: 24.5.2008
Из: Курган/СПб
Пользователь №: 182

Спасибо сказали: 29 раз(а)




Репутация:   5  


Единственное, проблема QListView - использование для предпросмотра реальных файлов приводит к тому, что удобнейшие вещи, такие как QDirModel, отпадают в использовании, т.к. они работают в том же потоке, что и гуи, т.е. открывая папку с фотками, получаем конкретный завис приложения (делаем свой IconProvider). В этом случае можно обойтись конечно написав ридер thumbnail'ов системных (могу поделиться либой для винды ХР, если кому надо), но это строго привязано к платформе (на том же KDE процесс чтения иконок очень прост, а на винде - гемморой еще тот, учитывая что в ХР и Висте разные схемы абсолютно).

Я сам обошел сию ситуацию через использование QListWidget и второго потока, который аккуратно читает изображения, и потихоньку пихает их в сий виджет, т.е. изначально заполняется виджет "пустышками" с названием, а далее уже идет загрузка фоток.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
ViGOur
  опции профиля:
сообщение 21.7.2009, 23:10
Сообщение #5


Мастер
******

Группа: Модератор
Сообщений: 3284
Регистрация: 9.10.2007
Из: Москва
Пользователь №: 4

Спасибо сказали: 231 раз(а)




Репутация:   40  


Цитата(ufna @ 22.7.2009, 0:01) *
могу поделиться либой для винды ХР, если кому надо
Если не лень выложи исходник с описанием на сайте, кому-нибудь да пригодится...
Зайди на crossplatform.ru и так как ты залогинен на форуме, то ты уже залогинен на сайте, соответственно можешь создать статью в разделе исходники (Создать материал) и прикрепить исходник здесь (пока здесь, поже сделаю возможность прикрепления на сайте). Если что-то не получится пиши мне, помогу или исправлю...
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 22.7.2009, 4:04
Сообщение #6


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9648
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


Цитата(ufna @ 22.7.2009, 3:01) *
такие как QDirModel, отпадают в использовании, т.к. они работают в том же потоке, что и гуи,
если ты их там создаёшь.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
ufna
  опции профиля:
сообщение 22.7.2009, 8:22
Сообщение #7


Активный участник
***

Группа: Участник
Сообщений: 362
Регистрация: 24.5.2008
Из: Курган/СПб
Пользователь №: 182

Спасибо сказали: 29 раз(а)




Репутация:   5  


Цитата
Если не лень выложи исходник с описанием на сайте, кому-нибудь да пригодится...


Вечером выложу :)


Цитата(Litkevich Yuriy @ 22.7.2009, 5:04) *
если ты их там создаёшь.


т.е. модель и представление могут спокойно жить в разных потоках? Не знал :)

Сам я с потоками редко работал, и в основном не Qt.

Для конретно приведенного примера правда все равно геммороя с QDirModel больше, имхо. Про возможность использования разных потоков не знал, углубляться в модицифирование не стал. QDirModel в своем изначальном состоянии будет грузить директорию "по одному", т.е. опячть же папка с фотками будет очень долго вся загружаться (при использование нового IconProvidera, который как бы сии иконки и грузит), не давая изначального превью хотя бы количества файлов.

Сообщение отредактировал ufna - 22.7.2009, 8:23
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 22.7.2009, 8:27
Сообщение #8


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9648
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


Цитата(ufna @ 22.7.2009, 12:22) *
т.е. модель и представление могут спокойно жить в разных потоках? Не знал
модель не наследник QPaintDevice поэтому может жить в отдельном от GUI потоке
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
ufna
  опции профиля:
сообщение 22.7.2009, 8:36
Сообщение #9


Активный участник
***

Группа: Участник
Сообщений: 362
Регистрация: 24.5.2008
Из: Курган/СПб
Пользователь №: 182

Спасибо сказали: 29 раз(а)




Репутация:   5  


Цитата(Litkevich Yuriy @ 22.7.2009, 9:27) *
модель не наследник QPaintDevice поэтому может жить в отдельном от GUI потоке


хм, как то не подумал, спасибо :)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
mozgofil
  опции профиля:
сообщение 22.7.2009, 18:30
Сообщение #10


Студент
*

Группа: Участник
Сообщений: 32
Регистрация: 23.4.2009
Пользователь №: 706

Спасибо сказали: 0 раз(а)




Репутация:   0  


Цитата(ufna @ 21.7.2009, 23:01) *
Единственное, проблема QListView - использование для предпросмотра реальных файлов приводит к тому, что удобнейшие вещи, такие как QDirModel, отпадают в использовании, т.к. они работают в том же потоке, что и гуи, т.е. открывая папку с фотками, получаем конкретный завис приложения (делаем свой IconProvider). В этом случае можно обойтись конечно написав ридер thumbnail'ов системных (могу поделиться либой для винды ХР, если кому надо), но это строго привязано к платформе (на том же KDE процесс чтения иконок очень прост, а на винде - гемморой еще тот, учитывая что в ХР и Висте разные схемы абсолютно).

Вот только не надо мух с котлетами путать:
QListView не виноват что модель тормозит.
Нужно просто сделать модель, которая будет изображения подгружать в отдельном потоке.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

2 страниц V   1 2 >
Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 13.11.2018, 5:38