Название: QTreeView + QFileSystemModel - скрыть стрелку пустых папок Отправлено: Serega от Апрель 06, 2015, 15:42 Теперь наверное точно застрял в этой серии http://www.prog.org.ru/topic_28581_0.html
Понятия не имею как скрыть расскрывающие стрелки пустых папок? Пытался переопределить: Код Не дает должного результата. Здесь уже вряд ли без помощи профи разобраться, во всяком случае быстро. Название: Re: QTreeView + QFileSystemModel - скрыть стрелку пустых папок Отправлено: Serega от Апрель 06, 2015, 19:46 Снова метод железного тыка привел к такому варианту:
Код
Работает и покороче (что посоветуете?): Код
Работает как часы. Однако хотелось бы спросить на сколько все плохо? Почему приходится итератор пару раз передвигать и почему его вообще надо двигать? Название: Re: QTreeView + QFileSystemModel - скрыть стрелку пустых папок Отправлено: Old от Апрель 06, 2015, 19:48 Это специальные элементы директория "." и ".."
Название: Re: QTreeView + QFileSystemModel - скрыть стрелку пустых папок Отправлено: Serega от Апрель 06, 2015, 20:17 Да действительно. Спасибо! Сам не догадался проверить :)
qDebug() << it.next(); А как само решение? Не слишком грубо и какой вариант предпочесть? Спрашиваю, поскольку практического опыта не много и не могу оценить решение. Название: Re: QTreeView + QFileSystemModel - скрыть стрелку пустых папок Отправлено: Old от Апрель 06, 2015, 20:30 Я бы проверил на isDir, получил из fileInfo объект QDir и смотрел на количество файлов QDir::count.
Название: Re: QTreeView + QFileSystemModel - скрыть стрелку пустых папок Отправлено: Serega от Апрель 06, 2015, 20:44 Помоему это первое, что пришло в голову испробовать. Однако почему то не прокатило. Пустые папки не оказывались таковыми.
Но попробую повнимательней, возможно какая нибудь мелочь типа "." и ".." не дала результат сразу. Название: Re: QTreeView + QFileSystemModel - скрыть стрелку пустых папок Отправлено: Old от Апрель 06, 2015, 20:47 Помоему это первое, что пришло в голову испробовать. Однако почему то не прокатило. Пустые папки не оказывались таковыми. Конечно. Папка не пуста, если count > 2.Но попробую повнимательней, возможно какая нибудь мелочь типа "." и ".." не дала результат сразу. Название: Re: QTreeView + QFileSystemModel - скрыть стрелку пустых папок Отправлено: Serega от Апрель 06, 2015, 20:51 Спасибо! Перепроверить уже успел. Действительно парочку так же надо было прибавить.
Название: Re: QTreeView + QFileSystemModel - скрыть стрелку пустых папок Отправлено: Serega от Апрель 06, 2015, 20:56 Вот так все просто:
Код
Название: Re: QTreeView + QFileSystemModel - скрыть стрелку пустых папок Отправлено: Serega от Апрель 06, 2015, 21:02 Проверка на isDir даст ли прирост в скорости хоть сколько нибудь? Или это будет отказоустойчивее?
Название: Re: QTreeView + QFileSystemModel - скрыть стрелку пустых папок Отправлено: Old от Апрель 06, 2015, 21:05 Проверка на isDir даст ли прирост в скорости хоть сколько нибудь? Или это будет отказоустойчивее? А сейчас у вас файлам плюсики не рисует? Как будто у них есть дети?Название: Re: QTreeView + QFileSystemModel - скрыть стрелку пустых папок Отправлено: Serega от Апрель 06, 2015, 21:10 Все в порядке. У файлов плюсиков (треугольники) нет.
Название: Re: QTreeView + QFileSystemModel - скрыть стрелку пустых папок Отправлено: Old от Апрель 06, 2015, 21:17 Все в порядке. У файлов плюсиков (треугольники) нет. Тогда hasChildren вызывается только для директорий и можно на isDir не проверять.Название: Re: QTreeView + QFileSystemModel - скрыть стрелку пустых папок Отправлено: Авварон от Апрель 06, 2015, 23:55 Тогда hasChildren вызывается только для директорий и можно на isDir не проверять. У файлов гарантированно rowCount == 0. ЗЫ: решение с rowCount > 2 будет самым быстрым, листинг директории - медленная штука (а в модели это уже закешировано) Название: Re: QTreeView + QFileSystemModel - скрыть стрелку пустых папок Отправлено: Serega от Апрель 07, 2015, 04:55 Тогда hasChildren вызывается только для директорий и можно на isDir не проверять. У файлов гарантированно rowCount == 0. ЗЫ: решение с rowCount > 2 будет самым быстрым, листинг директории - медленная штука (а в модели это уже закешировано) На сколько помню проверка показала, что этот метод считает точное колличество элементов в папке без точек. Однако только после того как папка была расскрыта. Поэтому здесь http://www.prog.org.ru/topic_28658_0.html пришлось проверять на существование каталог после его удаения и таким способом выходить из положения. Причем как то странно работает, казалось бы зачем воообще считать колличество строк в таком случае? Но без такой проверки работать отказывалось. Не пустая папка как и положенно не удаляется, но не удалялась как не пустая и rowCount тут не причем поскольку qDebug() показывает что этот мето не считает количество детей если она ни разу не открывалась. И соответственно соответствующее окно предупреждения для пользователя я не мог вывести. К тому же после такой проверки эту папку не возможно было удалить из представления даже если я удаляю все ее содержимое. |