Russian Qt Forum

Qt => Model-View (MV) => Тема начата: voral от Апрель 05, 2011, 23:09



Название: [Решено]QTreeView+QFileSystemModel. ScrollTo в конструкторе
Отправлено: voral от Апрель 05, 2011, 23:09
Создал класс на базе QDialog. В конструкторе есть следующий код (Это уже тестовый - только то, что необходимо):
Код
C++ (Qt)
Dialog::Dialog(QWidget *parent)
   : QDialog(parent)
{
model =new QFileSystemModel();
view = new QTreeView();
layout = new QHBoxLayout();
layout->addWidget(view);
view->setModel(model);
 
model->setRootPath("/");
view->setCurrentIndex(model->index("/home/alex/ProjectC"));
view->scrollTo(model->index("/home/alex/ProjectС"));
 
setLayout(layout);
}
 
Т.е. мне нужно чтобы дерево прокручивалось до "/home/alex/ProjectС". Однако при открытии диалога, данный каталог является текущим, но дерево до него остается не прокрученным.
Если код ниже прикрутить еще напимер на нажатие кнопки, то дерево прокручивается до нужного каталога
Код
C++ (Qt)
view->scrollTo(model->index("/home/alex/ProjectС"));
 
По асстенту вводе написано, что пункт должен быть раскрыт для  scrollTo. Но ведь он является раскрытым уже после setCurrentIndex (и пи отображении диалога он раскрыт).

Подскажите, что я делаю не так?

Может мне поможет (но я не нашел нужного метода) переопределить некий метод, или обработать сигнал. Который испускается/используется после отображения диалога или treeview?


Название: Re: QTreeView+QFileSystemModel. ScrollTo в конструкторе
Отправлено: Пантер от Апрель 06, 2011, 07:28
Заполнение модели происходит в потоке, поэтому, скорее всего, на момент установки setCurrentIndex данные еще не заполнены.
Используй void QFileSystemModel::directoryLoaded ( const QString & path ) [signal]


Название: Re: QTreeView+QFileSystemModel. ScrollTo в конструкторе
Отправлено: voral от Апрель 06, 2011, 08:01
Заполнение модели происходит в потоке, поэтому, скорее всего, на момент установки setCurrentIndex данные еще не заполнены.
Используй void QFileSystemModel::directoryLoaded ( const QString & path ) [signal]

Спасибо

Мда... Похоже придется на 4.7 переползать


Название: Re: QTreeView+QFileSystemModel. ScrollTo в конструкторе
Отправлено: voral от Апрель 06, 2011, 18:29
Заполнение модели происходит в потоке, поэтому, скорее всего, на момент установки setCurrentIndex данные еще не заполнены.
Используй void QFileSystemModel::directoryLoaded ( const QString & path ) [signal]
Нет. Это не помогло.
Возможно проблема в том, что ни сам диалог ни дерево не отображены на дисплее и их геометрия пока не известна (а это нужно для расчета "попал в окно не попал"). Кроме того в одном из тестов (прога тормозила) я заметил, что вложенные файл и каталоги появляются не в том порядке, что оказываются в итоге визуально.

Предложенный метод "почти" сработал. Дерево все же пролистывалось. Но в это время еще добавлялись элементы. И в конечном итоге оно оказывалось не в том положении.

Коме того этот сигнал испускается только для открываемых папок. Т.е. если Установить текущий каталог типа "/home/alex/project, то сигнал пройдет лишь три раза:
/
/home
/home/alex

Но главное я нашел Решение:
Я обработал void QAbstractItemModel::layoutChanged () [signal]. И на этот сигнал повесил scrollTo. Все сработало как надо.
Ну и к тому же нет необходимости привязывать проект к Qt 4.7