Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: Rain от Февраля 16, 2009, 23:20



Название: Дерево каталогов и иконка открытой папки
Отправлено: Rain от Февраля 16, 2009, 23:20
Доброго дня,

На форме нужно отобразить дерево каталогов (файлы отображать не нужно, только каталоги). Для этой цели использую QFileSystemModel и QTreeView.

Код:
fsModel = new QFileSystemModel;
fsModel->setReadOnly(true);
fsModel->setFilter(QDir::AllDirs | QDir::NoDotAndDotDot);
fsModel->setRootPath(rootPath);
ui.dirTreeView->setModel(fsModel);
for (int i = 1; i<fsModel->columnCount(); i++)
ui.dirTreeView->setColumnHidden(i, true);

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

Вроде бы и мелочи, но как-то не очень красиво. Эти проблемы можно решить малой кровью?

Заранее спасибо, всем ответившим:)


Название: Re: Дерево каталогов и иконка открытой папки
Отправлено: xintrea от Февраля 16, 2009, 23:52
Сейчас посмотрел как рисуется пример /examples/itemviews/dirview. Иконка открытой/закрытой директории действительно не меняется. А вот пустые директории определяются сами, и возле них плюсика нет. Использую Qt 4.4.1.

Чтоб твои проблемы решить, видимо нужно переделывать делегата ячейки. Делать это ниразу не пробовал, книжки, ассистент и более опытные товарищи тебе помогут.


Название: Re: Дерево каталогов и иконка открытой папки
Отправлено: Rain от Февраля 17, 2009, 00:01
Сейчас посмотрел как рисуется пример /examples/itemviews/dirview. Иконка открытой/закрытой директории действительно не меняется. А вот пустые директории определяются сами, и возле них плюсика нет. Использую Qt 4.4.1.

Да, но проблема в том, что в моем случае пустые директории это те, которые не содержат вложенных директорий.
У меня стоит фильтр
Код:
fsModel->setFilter(QDir::AllDirs | QDir::NoDotAndDotDot);

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

Чтоб твои проблемы решить, видимо нужно переделывать делегата ячейки.

Спасибо, буду смотреть в эту сторону. Хотя вообще странно, казалось бы такая очевидная функциональность:)