Russian Qt Forum
Ноябрь 23, 2024, 02:53 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: QFileSystemModel; setFilter(QDir::Files) отображает директории  (Прочитано 6009 раз)
a_nya
Гость
« : Январь 11, 2016, 11:31 »

Здравствуйте!
Создаю два окна, в одном выводится список директорий, во втором список файлов.
На первый взгляд все работает нормально, но при повторном прохождении по директориям (текущую директорию изменяю через первое окно), во втором окне начинают появляться не только файлы, но еще и директории  Непонимающий
Код:
	QFileSystemModel *m_fileModel;
QFileSystemModel *m_dirModel;

Код:
	m_dirModel = new QFileSystemModel(this);
m_dirModel->setFilter(QDir::NoDotAndDotDot | QDir::AllDirs );
  ui->treeView->setModel(m_dirModel);
ui->treeView->setRootIndex(m_dirModel->setRootPath(m_strSavePath));

m_fileModel = new QFileSystemModel(this);
m_fileModel->setFilter(QDir::NoDotAndDotDot | QDir::Files);
ui->listView->setModel(m_fileModel);


Код:
void widget_screenshots::on_treeView_clicked(const QModelIndex &index)
{
QString strPath = m_dirModel->fileInfo(index).absoluteFilePath();
ui->listView->setRootIndex(m_fileModel->setRootPath(strPath));
}


для наглядности:
при открытии

после прохождения по вложенным директориям
« Последнее редактирование: Январь 11, 2016, 11:45 от a_nya » Записан
gil9red
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1805



Просмотр профиля WWW
« Ответ #1 : Январь 11, 2016, 11:33 »

Молодец Улыбающийся
Записан

a_nya
Гость
« Ответ #2 : Январь 11, 2016, 11:34 »

Я рада, что кто-то по клавиатуре стучит более метко и быстро, чем я Улыбающийся
Записан
a_nya
Гость
« Ответ #3 : Январь 11, 2016, 11:44 »

А по теме есть комментарии?  Подмигивающий
Записан
Bepec
Гость
« Ответ #4 : Январь 11, 2016, 12:04 »

Если бы вы выложили архив с проектом, я бы посмотрел.
Записан
a_nya
Гость
« Ответ #5 : Январь 11, 2016, 14:51 »

Набросала минимальный проект. Проблема так и осталась Грустный
http://www.filedropper.com/sandynavigatefilesystem
Записан
a_nya
Гость
« Ответ #6 : Январь 11, 2016, 15:43 »

немного изменила код слота, добавив setNameFilters(). такой вариант, как я понимаю, не подойдет для случая, когда был установлен свой namefilter
Код:
void widget_screenshots::on_treeView_clicked(const QModelIndex &index)
{
QString strPath = m_dirModel->fileInfo(index).absoluteFilePath();
ui->listView->setRootIndex(m_fileModel->setRootPath(strPath));
m_fileModel->setNameFilters(QStringList());
}

http://www.filedropper.com/sandynavigatefilesystem2
Записан
Bepec
Гость
« Ответ #7 : Январь 11, 2016, 15:52 »

Бага какая то.
Записан
__Heaven__
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2130



Просмотр профиля
« Ответ #8 : Январь 11, 2016, 17:53 »

Есть тут какая-то логика. При входе в детей мы пополняем модель справа данными, которые не удаляются. Таким образом постепенно формируется полная иерархия.
Быть может каждый раз модель подсовывать новую, но это костыль.
И ещё интересная надпись, смысл которой я не совсем понял:
Цитировать
void QFileSystemModel::setFilter(QDir::Filters filters)
Sets the directory model's filter to that specified by filters.

Note that the filter you set should always include the QDir::AllDirs enum value, otherwise QFileSystemModel won't be able to read the directory structure.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.052 секунд. Запросов: 23.