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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: [Решено]QTreeView+QFileSystemModel. ScrollTo в конструкторе  (Прочитано 3731 раз)
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?
« Последнее редактирование: Апрель 06, 2011, 18:29 от voral » Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


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


Просмотр профиля WWW
« Ответ #1 : Апрель 06, 2011, 07:28 »

Заполнение модели происходит в потоке, поэтому, скорее всего, на момент установки setCurrentIndex данные еще не заполнены.
Используй void QFileSystemModel::directoryLoaded ( const QString & path ) [signal]
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
voral
Гость
« Ответ #2 : Апрель 06, 2011, 08:01 »

Заполнение модели происходит в потоке, поэтому, скорее всего, на момент установки setCurrentIndex данные еще не заполнены.
Используй void QFileSystemModel::directoryLoaded ( const QString & path ) [signal]

Спасибо

Мда... Похоже придется на 4.7 переползать
Записан
voral
Гость
« Ответ #3 : Апрель 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
« Последнее редактирование: Апрель 06, 2011, 18:33 от voral » Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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