Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: MVC для отбражения изображений
Форум на CrossPlatform.RU > Библиотеки > Qt > Qt Модель/Представление
QBatman
нужно сделать что-то типа вида Thumbnails(эскизы страниц) у explorer'a
т.е. кол-во колонок и строк зависит от размера окна, т.е. при ресайзе прийдётся перестраивать модель, чего делать не хочется.
как правильно сделать?
ufna
а в чем проблема, т.е. как ты это хочешь реализовывать? Что использовать и т.п.


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

получаем вот так
Нажмите для просмотра прикрепленного файла

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

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

Я сам обошел сию ситуацию через использование QListWidget и второго потока, который аккуратно читает изображения, и потихоньку пихает их в сий виджет, т.е. изначально заполняется виджет "пустышками" с названием, а далее уже идет загрузка фоток.
ViGOur
Цитата(ufna @ 22.7.2009, 0:01) *
могу поделиться либой для винды ХР, если кому надо
Если не лень выложи исходник с описанием на сайте, кому-нибудь да пригодится...
Зайди на crossplatform.ru и так как ты залогинен на форуме, то ты уже залогинен на сайте, соответственно можешь создать статью в разделе исходники (Создать материал) и прикрепить исходник здесь (пока здесь, поже сделаю возможность прикрепления на сайте). Если что-то не получится пиши мне, помогу или исправлю...
Litkevich Yuriy
Цитата(ufna @ 22.7.2009, 3:01) *
такие как QDirModel, отпадают в использовании, т.к. они работают в том же потоке, что и гуи,
если ты их там создаёшь.
ufna
Цитата
Если не лень выложи исходник с описанием на сайте, кому-нибудь да пригодится...


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


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


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

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

Для конретно приведенного примера правда все равно геммороя с QDirModel больше, имхо. Про возможность использования разных потоков не знал, углубляться в модицифирование не стал. QDirModel в своем изначальном состоянии будет грузить директорию "по одному", т.е. опячть же папка с фотками будет очень долго вся загружаться (при использование нового IconProvidera, который как бы сии иконки и грузит), не давая изначального превью хотя бы количества файлов.
Litkevich Yuriy
Цитата(ufna @ 22.7.2009, 12:22) *
т.е. модель и представление могут спокойно жить в разных потоках? Не знал
модель не наследник QPaintDevice поэтому может жить в отдельном от GUI потоке
ufna
Цитата(Litkevich Yuriy @ 22.7.2009, 9:27) *
модель не наследник QPaintDevice поэтому может жить в отдельном от GUI потоке


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

Вот только не надо мух с котлетами путать:
QListView не виноват что модель тормозит.
Нужно просто сделать модель, которая будет изображения подгружать в отдельном потоке.
ufna
А я где-то говорил что это виноват QListView? Собственно, смотри выше, я уже писал что сделал через второй поток, только основываясь на QListWidget, т.к. на мой взгляд это легче и оправданней в контексте моего приложения. Модель тоже можно модифицировать, тут как удобнее. Я только говорю о том, что придется на этот предмет немного заморочится, вот и все.
Litkevich Yuriy
Цитата(ufna @ 22.7.2009, 22:47) *
что сделал через второй поток, только основываясь на QListWidget
собственно посмотри что получилось, QListWidget - это QListView со встроенной моделью.
Т.е. и получается, что можно немного модифицировать и получишь:
QListView + собственная "модель в доппотоке", либо "модель использующая доппоток".
ufna
да, согласен :) просто не знал что модель и вью могут в разных потоках жить.

вариантов то множество :)
mozgofil
Цитата(ufna @ 22.7.2009, 18:47) *
А я где-то говорил что это виноват QListView?

говорил:)

Кстати, "модель использующая доппоток" будет иметь приемущество в скорости если данные в View передавать ч/з указатель
mozgofil
неплохой фичей было бы отображать изображение в родном для ОСи вьювере
например при 2йном щелчке по изображению.
Кто знает, как запустить вьювер из Qt?
Litkevich Yuriy
Цитата(mozgofil @ 23.7.2009, 23:44) *
Кто знает, как запустить вьювер из Qt?
см. bool QDesktopServices::openUrl ( const QUrl & url ) [static]
mozgofil
Спасибо!
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Форум IP.Board © 2001-2024 IPS, Inc.