Russian Qt Forum

Qt => Model-View (MV) => Тема начата: TheBlade от Январь 20, 2010, 15:58



Название: QSortFilterProxyModel и QModelIndex
Отправлено: TheBlade от Январь 20, 2010, 15:58
Здравствуйте.
Я использую QSortFilterProxyModel для того что бы не показывать файлы, а только папки в QTreeView.
Код:
    
    model = new QFileSystemModel();
    model->setRootPath(0);QSortFilterProxyModel *sfpm = new QSortFilterProxyModel();
    sfpm->setSourceModel(model);
    sfpm->setFilterRegExp(QRegExp("File Folder|Drive", Qt::CaseInsensitive,
                                        QRegExp::RegExp));
    sfpm->setFilterKeyColumn(2);
также model одновременно используется и QListView для просмотра содержимого папок и предпросмотра фотографий.
переход в папку по сигналу
    connect(tView,SIGNAL(activated(QModelIndex)),lView,SLOT(setRootIndex(QModelIndex)));

tView - QListView
lView - QTreeView

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

Код:
void MyListView::setRootIndex(QModelIndex &index)
{
    QListView::setRootIndex(((QSortFilterProxyModel)index.model()).mapToSource(index));
}
Не вышло. Не смог привести тип...

Как это можно реализовать?
И второй вопрос косметического характера:
в QTreeView не отображаются файлы, но папки в которых они есть - с плюсиками. При нажатии на них плюсик пропадает. Как сделать так чтобы папки без подпапок сразу были без плюсика.


Название: Re: QSortFilterProxyModel и QModelIndex
Отправлено: Kolobok от Январь 20, 2010, 16:41
А зачем прокся?
Код:
model->setFilter( QDir::AllDirs | QDir::NoDotAndDotDot );


Название: Re: QSortFilterProxyModel и QModelIndex
Отправлено: crossly от Январь 20, 2010, 16:49
а не проще сделать слот.... в котором сначала узнать sourceIndex а потом вызвать setRootIndex