Russian Qt Forum

Qt => Model-View (MV) => Тема начата: Alex Custov от Апрель 02, 2009, 16:31



Название: Компонент просмотра ФС vs. MVC
Отправлено: Alex Custov от Апрель 02, 2009, 16:31
необходимо написать небольшой компонент просмотра ФС, с обычными переключалками вида типа "дерево", "иконки", "список". Вроде бы MVC подходит, но почитав некоторые темы по QFileSystemModel или QDirModel становится как-то грустно. Баги в важных местах находят до сих пор. В связи с этим возникает вопрос а стоит ли вообще заморачиваться с MVC и не писать ли на классических item-based виджетах? Какие преимущества и недостатки у обоих подходов вы видите?


Название: Re: Компонент просмотра ФС vs. MVC
Отправлено: Пантер от Апрель 02, 2009, 21:16
Сейчас заморачиваюсь по этой теме. Свою модель написал, уже можно нормально бегать по ФС. Вот более менее сделаю и выложу на всеобщее обозрение.


Название: Re: Компонент просмотра ФС vs. MVC
Отправлено: lit-uriy от Апрель 02, 2009, 21:35
>>не писать ли на классических item-based виджетах?
А их в принципе в Qt4 нет, Q***Widget - наследник Q***View просто внутри содержит модель. Следовательно надо сделать свою модель (Как это сделал panter_dsd) прицепить к интерисующему представлению и всё.


Название: Re: Компонент просмотра ФС vs. MVC
Отправлено: Alex Custov от Апрель 02, 2009, 21:43
Сейчас заморачиваюсь по этой теме. Свою модель написал, уже можно нормально бегать по ФС. Вот более менее сделаю и выложу на всеобщее обозрение.

будет интересно посмотреть


Название: Re: Компонент просмотра ФС vs. MVC
Отправлено: Пантер от Апрель 02, 2009, 22:26
Сейчас заморачиваюсь по этой теме. Свою модель написал, уже можно нормально бегать по ФС. Вот более менее сделаю и выложу на всеобщее обозрение.

будет интересно посмотреть
Вообще пытаюсь коммандер написать. Пока сделана модель локальной фс, табы каталогов, переименование файлов. Еще столько сделать нужно.... :)



Название: Re: Компонент просмотра ФС vs. MVC
Отправлено: Alex Custov от Апрель 03, 2009, 01:44
Я правильно понимаю, что если прицепить QFileSystemModel к QTreeView, то смешение файлов и каталогов - это нормально поведение, и чтобы сделать каталоги сперва, то нужно переопредеять sort() или использовать QSortFilterProxyModel?


Название: Re: Компонент просмотра ФС vs. MVC
Отправлено: Пантер от Апрель 03, 2009, 06:11
Использовать QSortFilterProxyModel.


Название: Re: Компонент просмотра ФС vs. MVC
Отправлено: crackedmind от Апрель 03, 2009, 14:32
Вообще пытаюсь коммандер написать. Пока сделана модель локальной фс, табы каталогов, переименование файлов. Еще столько сделать нужно.... :)
Интересно. Ты хочешь сделать полноценный коммандер? Какой функционал планируешь? Будет ли Open Source? :)


Название: Re: Компонент просмотра ФС vs. MVC
Отправлено: Пантер от Апрель 03, 2009, 16:49
1. Полноценный.
2. Полный.
3. Тут даже без вопросов. Конечно GPL.
Вообще пишу для саморазвития. Если что-нибудь получится и не надоест, буду развивать.


Название: Re: Компонент просмотра ФС vs. MVC
Отправлено: Alex Custov от Апрель 03, 2009, 19:39
Использовать QSortFilterProxyModel.

Сделал базовую QSortFilterProxyModel с двумя пока пустыми методами lessThan() и filterAcceptsRow(). Оба возвращают true. При этом в дереве (QTreeView) пропали элементы + (те что разворачивают каталоги). Было:

Код:
model = new QFileSystemModel;
model->setResolveSymlinks(true);

root = model->setRootPath(QDir::rootPath());

view->setModel(model);
view->setRootIndex(model->index(root));

Стало:

Код:
model = new QFileSystemModel;
model->setResolveSymlinks(true);

proxySortModel = new DirectorySortFilterProxyModel;
proxySortModel->setDynamicSortFilter(true);
proxySortModel->setSourceModel(model);

root = model->setRootPath(QDir::rootPath());

view->setModel(proxySortModel);
view->setRootIndex(proxySortModel->mapFromSource(root));

Что-то я не пойму взаимосвязи сортировки и наличия крестиков возле каталогов ??? "rootIsDecorated" установлен в true.

panter_dsd кстати, а как ты будешь решать проблему отображения MIME иконок под Linux? Или это уже сделано? Будет интересно узнать как.


Название: Re: Компонент просмотра ФС vs. MVC
Отправлено: Пантер от Апрель 04, 2009, 09:36
На счет пропажи rootIsDecorated не знаю, так как устанавливаю в false.
По поводу иконок еще не копался, пока только под виндой работают, а под Линухой стандартные показывает. Скорее всего под кеды придется заточить.


Название: Re: Компонент просмотра ФС vs. MVC
Отправлено: Alex Custov от Апрель 05, 2009, 07:23
то что файлы и каталоги смешиваются, это оказывается баг ещё с 4.4.0. В 4.5.0 судя по всему починено, но я вглубь не смотрел.

Цитировать
Thank you for the suggestion.  This is currently under consideration.
You can track the task here:

http://www.trolltech.com/developer/task-tracker/index_html?id=214108&method=entry


Название: Re: Компонент просмотра ФС vs. MVC
Отправлено: kirill от Апрель 07, 2009, 05:37
Совет, откажитесь совсем от использования QFileSystemModel и делайте все вручную через QDir, QFileInfo.
Тогда и не будет вопросов где плюсики и т.п. По поводу плюсиков Константин писал, что QFileSystemModel кэширует обращения к каталогам, так что узнать, что в каталоге нельзя не обратившись к нему. Как то так.


Название: Re: Компонент просмотра ФС vs. MVC
Отправлено: Joned от Апрель 09, 2009, 13:08
Когда выложиш срочнно нужна пожожая фишка


Название: Re: Компонент просмотра ФС vs. MVC
Отправлено: Пантер от Апрель 09, 2009, 17:30
Это ко мне?