Russian Qt Forum
Мая 29, 2025, 20:35 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: tableView и autoScroll  (Прочитано 6559 раз)
Flakes
Гость
« : Октября 08, 2008, 08:37 »

Я делаю selection где то за пределами видимости, нужно скролинг автоматом бежал например на первую строчку из selection, однако ничего никуда не бежит. Я бы и сам делал бы scrollTo(), но нужный, как мне кажется, метод horizontalOffset() - приватный.

По дефолту autoScroll для tableView включен, но либо он не работает - либо я не догоняю, что он должен делать, но явно не то, что мне нужно.
Записан
registrationfedser87
Гость
« Ответ #1 : Октября 08, 2008, 09:08 »

Тебе наверно надо использовать selectionModel. Посмотри пример demos/interview ,наверно поможет.
Записан
Flakes
Гость
« Ответ #2 : Октября 08, 2008, 09:14 »

да, вроде оно. Спасибо, буду разбираться.
Записан
Flakes
Гость
« Ответ #3 : Октября 08, 2008, 10:57 »

не знаю каким чудом оно там работает, но работает с юзером только. Если я делаю ручной select, за пределами view - выделяется как надо, но скрол на ту позицию не идет Непонимающий Как раз то что меня и волнует...
Код:
......
page.show();

QItemSelection selection;
QModelIndex indexLeft = data->index(20, 0);
QModelIndex indexRight = data->index(20,0);
selection.select(indexLeft, indexRight);
selections->select(selection, QItemSelectionModel::Select);

return app.exec();
}

Разъясните, может селекшн мышкой чем то отлечатеся от метода select()?

UPD: Делая какие нить манипуляции с таблицей и ее обновляя затем - я могу восстановить селекшн, но не положение скрола. Поэтому я повторюсь, на первых парах мне хватило бы координат текущего скролл-положения, и я затем бы делал scrollTo() на прежнее место. А в идеале, я хочу конечно, чтоб эта сабака сама скролила куда надо, как в примере!

UPD2: Я думаю тут вся магия вокруг фокуса, этой пунктирной рамочки. Делая селекшн - с фокусом ничего не происходит, его либо нет вообще, либо он на самом первом элементе остается. На картинке я сделал селекшн только 5го элемента, который в пределах видимости, как видно фокус торчит на первом:

Конечно же если выделять вне видимости - тут то и жопа: как переместив фокус на нужный элемент (не путайте с фокусом виджета) - думаю все соскролится на него.
« Последнее редактирование: Октября 09, 2008, 07:17 от Flakes » Записан
Flakes
Гость
« Ответ #4 : Октября 09, 2008, 06:42 »

Я вижу одно решение. Оказывается scrollTo(const QModelIndex & index) умеет скролить по нужному индексу (как я сразу не заметил), но это виртуальный метод [pure virtual]. Это значит нужно наследовать QTableView и самому реализовывать его? И тут я застреваю...

Объясните кто-нить мне балбесу, зачем такие виртуальные методы, если ни в одном классе, наследующим базовый QAbstractItemView, они не реализованы?
Записан
denka
Гость
« Ответ #5 : Октября 09, 2008, 09:27 »

Я вижу одно решение. Оказывается scrollTo(const QModelIndex & index) умеет скролить по нужному индексу (как я сразу не заметил), но это виртуальный метод [pure virtual]. Это значит нужно наследовать QTableView и самому реализовывать его? И тут я застреваю...
Сей метод чисто виртуальный только у QAbstractItemView. У наследников же этого класса эти ф-ции даже очень реализованы. Если бы это было не так, то не возможно было создавать экземпляры этих объектов, т.к. С++ не допускает создание экземпляров классов с чисто виртуальными методами.
Записан
Flakes
Гость
« Ответ #6 : Октября 09, 2008, 20:10 »

Так и есть, мне было лень даже проверить Улыбающийся Проблема решена тогда...

UPD: В совокупности методов этих методов все теперь как надо:
Код:
view->verticalScrollBar()->setValue();
view->scrollTo();
view->setCurrentIndex();
« Последнее редактирование: Октября 10, 2008, 12:46 от Flakes » Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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