Иконки и текст в связке QListView + QFileSystemModel, ... а также фильтрация файлов |
Здравствуйте, гость ( Вход | Регистрация )
Иконки и текст в связке QListView + QFileSystemModel, ... а также фильтрация файлов |
r485_post |
13.11.2010, 23:12
Сообщение
#1
|
Студент Группа: Новичок Сообщений: 10 Регистрация: 31.7.2009 Пользователь №: 970 Спасибо сказали: 0 раз(а) Репутация: 0 |
Здравствуйте.
Казалось бы, как всё просто .... , если не углубляться! Проблема в том, что QFileSystemModel задаёт свои стандартные иконки. Мне нужно для определённых файлов задать свои собственные. Вопрос - как это сделать без велосипедов ? Мне теперь что, строить свою QStandardItemModel ? (И зачем тогда нужен QFileIconProvider, если в нем ничего не задаётся ?) Хочу в надписях итемов отображать только baseName. Если принудительно задать каждому setData ( index, "произвольный текст", Qt::DisplayRole ), то ничего не произойдёт. Вероятно QFileSystemModel обратно возвращает всё на свои места. Неужели никто не боролся с этой ветряной мельницей ? Если в QListView всунуть QSortFilterProxyModel, а в QSortFilterProxyModel, в свою очередь, всунуть QFileSystemModel, то можно фильтровать файлы - прекрасно ! Но сортировка применяется ко всем элементам QSortFilterProxyModel, а это значит, что непопавшие элементы вылетают (наверное) из QSortFilterProxyModel, что приводит к изменению rootIndex в QListView. Таким образом после фильтрации мы наблюдаем в QListView не ту папку которую установили в качестве rootIndex, а самую корневую - хреново ! Так что сортирую вручную простым перебором элементов в папке, делая им setRowHidden ( 0, bool условие видимости ). |
|
|
Litkevich Yuriy |
13.11.2010, 23:50
Сообщение
#2
|
разработчик РЭА Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94 |
а это значит, что непопавшие элементы что значит не попавшие?Вопрос - как это сделать без велосипедов ? Мне теперь что, строить свою QStandardItemModel ? через свою ProxyModel, для определённого типа файлов для DecorationRole возвращать подходящую картинку
|
|
|
r485_post |
14.11.2010, 0:00
Сообщение
#3
|
Студент Группа: Новичок Сообщений: 10 Регистрация: 31.7.2009 Пользователь №: 970 Спасибо сказали: 0 раз(а) Репутация: 0 |
Здравствуйте. Казалось бы, как всё просто .... , если не углубляться! Проблема в том, что QFileSystemModel задаёт свои стандартные иконки. Мне нужно для определённых файлов задать свои собственные. Вопрос - как это сделать без велосипедов ? Мне теперь что, строить свою QStandardItemModel ? (И зачем тогда нужен QFileIconProvider, если в нем ничего не задаётся ?) Хочу в надписях итемов отображать только baseName. Если принудительно задать каждому setData ( index, "произвольный текст", Qt::DisplayRole ), то ничего не произойдёт. Вероятно QFileSystemModel обратно возвращает всё на свои места. Неужели никто не боролся с этой ветряной мельницей ? Если в QListView всунуть QSortFilterProxyModel, а в QSortFilterProxyModel, в свою очередь, всунуть QFileSystemModel, то можно фильтровать файлы - прекрасно ! Но сортировка применяется ко всем элементам QSortFilterProxyModel, а это значит, что непопавшие элементы вылетают (наверное) из QSortFilterProxyModel, что приводит к изменению rootIndex в QListView. Таким образом после фильтрации мы наблюдаем в QListView не ту папку которую установили в качестве rootIndex, а самую корневую - хреново ! Так что сортирую вручную простым перебором элементов в папке, делая им setRowHidden ( 0, bool условие видимости ). Решение первого вопроса уже придумал замечательный человек вот здесь http://www.prog.org.ru/topic_15452_0.HTML . Суть в том, чтобы нарисовать стилизованый делегат. А вот примеров стилизованного делегата я в документации Qt не видел (наверное плохо искал). "не попавшие" в смысле отфильтрованные и теперь их не должно быть видно |
|
|
Litkevich Yuriy |
14.11.2010, 0:55
Сообщение
#4
|
разработчик РЭА Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94 |
ссылка явно битая
|
|
|
Текстовая версия | Сейчас: 28.3.2024, 18:04 |