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

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

Страниц: [1] 2 3   Вниз
  Печать  
Автор Тема: qfilesystemmodel  (Прочитано 13756 раз)
koldun90
Крякер
****
Offline Offline

Сообщений: 345


Просмотр профиля
« : Июль 31, 2014, 13:24 »

Здравствуйте вы не могли бы пояснить что нужно сделать что бы модель отображала не всю файловую систему ,а отображала только несколько
каталогов( мне нужно чтоб отображало корень"/",домашнюю директорию "/root"(директория пользователя root), а также еще каталог /mnt. Работаю в linuх. я так понимаю что нужно что то переопределить в qfilesystemmodel но вот что не знаю...
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #1 : Июль 31, 2014, 13:37 »

1. void QFileSystemModel::setNameFilters(const QStringList & filters)
2. Можно пропустить ее через QSortFilterProxyModel.
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
koldun90
Крякер
****
Offline Offline

Сообщений: 345


Просмотр профиля
« Ответ #2 : Июль 31, 2014, 14:43 »

1. void QFileSystemModel::setNameFilters(const QStringList & filters)
2. Можно пропустить ее через QSortFilterProxyModel.

Код:
const QStringList & filters
я так понял этот список должен содержать папки которые я собираюсь отображать
те в моем случае он должен включать /, /mnt, /root

и что значит "Можно пропустить ее через QSortFilterProxyModel." поясните подробнее?
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #3 : Июль 31, 2014, 14:45 »

QSortFilterProxyModel используется для того, чтобы отсортировать другую модель, либо применить к ней фильтр. Подробнее ты можешь прочитать в Ассистенте и посмотреть примеры.
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
koldun90
Крякер
****
Offline Offline

Сообщений: 345


Просмотр профиля
« Ответ #4 : Июль 31, 2014, 16:00 »

ну допустим сделал я так
Код:
QStringList filters;
filters<<"/mnt";
filters<<"/root";
model1->setNameFilters(filters);
в итоге получилось что
« Последнее редактирование: Июль 31, 2014, 16:08 от koldun90 » Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #5 : Август 01, 2014, 07:26 »

Да, не оно. Тогда через прокси модель.
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
koldun90
Крякер
****
Offline Offline

Сообщений: 345


Просмотр профиля
« Ответ #6 : Август 01, 2014, 09:22 »

Цитировать
QSortFilterProxyModel используется для того, чтобы отсортировать другую модель, либо применить к ней фильтр

ВЫ меня неправильно поняли наверно мне нужно чтобы как бы отображалось в моделе всего несколько каталогов допустим:

+/
    +/root
    +/home
    +/mnt
и все собственно мне поможет это сделать QSortFilterProxyModel?

и скажите какой метод смотреть в QSortFilterProxyModel?
« Последнее редактирование: Август 01, 2014, 09:35 от koldun90 » Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #7 : Август 01, 2014, 09:35 »

и все собственно мне поможет это сделать QSortFilterProxyModel?
Да. Отнаследуйся от нее и реализуй
Код
C++ (Qt)
bool QSortFilterProxyModel::filterAcceptsRow(int source_row, const QModelIndex & source_parent) const [virtual protected]
 
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
koldun90
Крякер
****
Offline Offline

Сообщений: 345


Просмотр профиля
« Ответ #8 : Август 04, 2014, 09:18 »

начал я реализовывать сделал так

mainwindow.cpp
Код:
{
    model1=new myqfilesystemmodel;  //модель файловой системы ничего не переопределено

    model2=new myqsortfilterproxymodel;  //переопределен filteracceptrow


    model1->setRootPath(QDir::rootPath());   //QDir::rootPath()--возвращает корень "/"
    model1->setFilter(QDir::AllDirs | QDir::Files | QDir::NoDotAndDotDot);  //устанавливаю фильтер

    model2->setSourceModel(model1); // засовываю myqfilesystemmodel в
myqsortfilterproxymodel
    ui->treeView->setModel(model2); // в трививеве отображаю myqsortfilterproxymodel
    ui->treeView->hideColumn(2);  // скрываю столбец один
 }


myqsortfilterproxymodel.cpp

Код:
myqsortfilterproxymodel::myqsortfilterproxymodel()
{
    r=new myqfilesystemmodel;
}

Код:
bool myqsortfilterproxymodel::filterAcceptsRow(int source_row, const QModelIndex &source_parent) const
{


    QString str=r->fileInfo(source_parent).absoluteFilePath();  //беру индекс который попадает в метод
 
        if (str=="/" || str=="/root" || str=="/mnt/cdrom")  // затем сравниваю его с заданными //индексами
        {
            return true; // и если индекс является одним из 3ех то я его добавляю в отображение
        }
        else
        {
            return false; // иначе не добавляю
        }

}

p.s я так понял в документации написано так "Returns true if the item in the row indicated by the given source_row and source_parent should be included in the model; otherwise returns false."

ТЕ возвратит true если source_parent должна включаться в отображение, если не должна то false..

В итоге после запуска программы treeview вообще пустой ,те в модель не добавляется ничего хотя по идее там должно быть 3 каталога исходя из вышеприведенного кода
"/"--корневой каталог
"/root"--каталог пользователя root
"/mnt/cdrom"--каталог cdrom
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #9 : Август 04, 2014, 09:35 »

    r=new myqfilesystemmodel;
нахрена в конструкторе?
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
koldun90
Крякер
****
Offline Offline

Сообщений: 345


Просмотр профиля
« Ответ #10 : Август 04, 2014, 09:42 »

мне нужно взять информацию о индексе source_parent для
этого нужно использовать fileinfo это метод класса qfilesystemmodel
как вы предлагаете сделать?
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #11 : Август 04, 2014, 09:43 »

Допустим:
qobject_cast<QFileSystemModel*> (sourceModel ())
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
koldun90
Крякер
****
Offline Offline

Сообщений: 345


Просмотр профиля
« Ответ #12 : Август 04, 2014, 09:57 »

вы имеете ввиду
Код:
qobject_cast<QFileSystemModel*> (sourceModel ())->fileinfo(source_parent); 
??

Записан
koldun90
Крякер
****
Offline Offline

Сообщений: 345


Просмотр профиля
« Ответ #13 : Август 04, 2014, 10:11 »

а что мне это даст я не понимаю у меня не отображаются каталоги в представлении модели...
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #14 : Август 04, 2014, 10:38 »

Из моего старого проекта - может, поможет.
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
Страниц: [1] 2 3   Вверх
  Печать  
 
Перейти в:  


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