Russian Qt Forum

Qt => Вопросы новичков => Тема начата: Smogg от Ноябрь 28, 2014, 11:51



Название: QFileSystemModel и неотображение флопиков
Отправлено: Smogg от Ноябрь 28, 2014, 11:51
Как заставить пропускать драйвы A:/ и B:/ для отображения? Или, чтоб при при запуске не лез в них. А то секунд 10 тормозит, ожидая отклика от несуществующего драйва (который винда показывает, что есть, но физически его нет)


Название: Re: QFileSystemModel и неотображение флопиков
Отправлено: Пантер от Ноябрь 28, 2014, 11:52
На сколько я помню, никак. Только фильтр попробовать добавить, в котором убрать их.


Название: Re: QFileSystemModel и неотображение флопиков
Отправлено: Smogg от Ноябрь 28, 2014, 12:47
На сколько я помню, никак. Только фильтр попробовать добавить, в котором убрать их.
Попытался так:
Код:
MyFileSystemModel::MyFileSystemModel(QObject *parent):
QFileSystemModel(parent)
{
this->setFilter(QDir::NoDotAndDotDot | QDir::AllDirs);
// this->setFilter((QDir::NoDotAndDotDot | QDir::AllDirs) & (~QDir::Drives));
this->setRootPath("c:/55/");
}
Один бес дерево отбражается с самого-самого корня, т.е. захватывая все драйвы. Просто С:/ разворачивается до директории "55"... Что с раскомментированной строчкой, что так...


Название: Re: QFileSystemModel и неотображение флопиков
Отправлено: Пантер от Ноябрь 28, 2014, 12:54
Вьюхе задай.
Код:
tree->setRootIndex(model->index(QDir::currentPath()));

Зачем наследоваться?


Название: Re: QFileSystemModel и неотображение флопиков
Отправлено: Smogg от Ноябрь 28, 2014, 13:29
Вьюхе задай.
Код:
tree->setRootIndex(model->index(QDir::currentPath()));

Зачем наследоваться?

Попробовал так, с заданием вьюхе:
Код:
mdlDir = new QFileSystemModel(this);
mdlDir->setFilter(QDir::NoDotAndDotDot | QDir::AllDirs);
QModelIndex idx = mdlDir->index("C:/");
ui.treeDir->setRootIndex(idx);

Драйв С показывается, но не раскрывается, и зачем-то вылез каррентПаф...
(http://snorgg.ru/img/treeDirView.JPG)

А если установить в модели RootPath, то ничего не меняется. Все также изначально показываются все драйвы.  И даже expand не срабатывает:
Код:
	mdlDir = new QFileSystemModel(this);
mdlDir->setFilter(QDir::NoDotAndDotDot | QDir::AllDirs);
// QModelIndex idx = mdlDir->index("C:/");
//  mdlDir->setRootPath("C:/");
QModelIndex idx = mdlDir->index("c:\\!VS\\");
mdlDir->setRootPath("c:\\!VS\\");
QString ss = mdlDir->filePath(idx);
ui.treeDir->setRootIndex(idx);
ui.treeDir->expand(idx);


Название: Re: QFileSystemModel и неотображение флопиков
Отправлено: Smogg от Ноябрь 28, 2014, 14:02
Разобрался.
Порядок операций был неправилен)
Сначала нужно было назначить модель для вьюхи, а потом уже устанавливать RootIndex.
Код:
	mdlDir = new QFileSystemModel(this);	
mdlDir->setFilter(QDir::NoDotAndDotDot | QDir::AllDirs);
mdlDir->setRootPath("c:/");

ui.treeDir->setModel(mdlDir);
QModelIndex idx = mdlDir->index("c:/");
ui.treeDir->setRootIndex(idx);
Теперь вью не дергает ничего выше РутИндекса)))


Название: Re: QFileSystemModel и неотображение флопиков
Отправлено: Пантер от Ноябрь 28, 2014, 14:08
Код:
mdlDir = new QFileSystemModel(this);
mdlDir->setFilter(QDir::NoDotAndDotDot | QDir::AllDirs);
const QModelIndex idx = mdlDir->setRootPath("C:/");
ui.treeDir->setRootIndex(idx);


Название: Re: QFileSystemModel и неотображение флопиков
Отправлено: Smogg от Ноябрь 29, 2014, 01:49
Код:
mdlDir = new QFileSystemModel(this);
mdlDir->setFilter(QDir::NoDotAndDotDot | QDir::AllDirs);
const QModelIndex idx = mdlDir->setRootPath("C:/");
ui.treeDir->setRootIndex(idx);
) можно и так.

Но все равно, QFileSystemModel - жутко тормознутая гадость( Везде она суется как образец, а на деле - издевательство и нервотрепка. Так и не сумел добиться адеквата. На каждое открытие каталога тратится секунда минимум... 


Название: Re: QFileSystemModel и неотображение флопиков
Отправлено: Пантер от Декабрь 01, 2014, 09:28
Время может на иконки тратиться. Попробуй отнаследоваться от QFileSystemModel и в методе data вернуть на Qt::DecorationRole пустой QVariant, а на остальные вернуть QFileSystemModel::data. Может, поможет. :)