имется задача: написать свой FileDialog (максимально повторяющий функционал стандартного QFileDialog).
Но у FileDialog должны быть особенности:
1. Запрет перехода "вверх"/"вниз" по заданным правилам (решено)
2. Свои правила отображения файлов и папок - показывать только те файлы/папки, которые удовлетворяют заданным правилам.
Идея решения: унаследоваться от QFileDialog и "обработать его напильником".
Для реализации правил фильтрации файлов/папок предполагается подменить model в QFileDialog.
Внимание, вопрос: Как подменить модель на другую (для начала - на стандартную)?
Ниже приведен пример моего кода (некорректного) из-за которого код "квасится" при инициализации диалога.
// МОДЕЛЬ
QWidget * widgetTV = this->findChild<QWidget *>("treeView");
QWidget * widgetLV = this->findChild<QWidget *>("listView");
if( ( widgetTV != NULL) && ( widgetLV != NULL ) )
{
QDirModel model;
QTreeView *tv = dynamic_cast<QTreeView*>(widgetTV);
QListView *lv = dynamic_cast<QListView*>(widgetLV);
if( ( tv!=NULL ) && ( lv!=NULL ) )
{
tv->setModel(&model);
lv->setModel(&model);
}
}
Хочу сразу заметить, что в стандартном QFileDialog имеются прорехи: по каким-то причинам он зависает при неисправной сети, если это не лабораторная или курсовая работа, то лучше это учесть и использовать функции ОС. Понимаю, что это менее удобно, но иначе будут проблемы, если есть проблемы с сетью. Или же постараться обнаружить эту ошибку в QFileDialog (я этим пока не занимался, слишком много более важной работы.)
Прекращайте трёп.
Тема называется "custom FileDialog, как заменить Model?"
Форум Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)