Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: Flakes от Октября 08, 2008, 08:37



Название: tableView и autoScroll
Отправлено: Flakes от Октября 08, 2008, 08:37
Я делаю selection где то за пределами видимости, нужно скролинг автоматом бежал например на первую строчку из selection, однако ничего никуда не бежит. Я бы и сам делал бы scrollTo(), но нужный, как мне кажется, метод horizontalOffset() - приватный.

По дефолту autoScroll для tableView включен, но либо он не работает - либо я не догоняю, что он должен делать, но явно не то, что мне нужно.


Название: Re: tableView и autoScroll
Отправлено: registrationfedser87 от Октября 08, 2008, 09:08
Тебе наверно надо использовать selectionModel. Посмотри пример demos/interview ,наверно поможет.


Название: Re: tableView и autoScroll
Отправлено: Flakes от Октября 08, 2008, 09:14
да, вроде оно. Спасибо, буду разбираться.


Название: Re: tableView и autoScroll
Отправлено: Flakes от Октября 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го элемента, который в пределах видимости, как видно фокус торчит на первом:
(http://xs432.xs.to/xs432/08413/2008-10-09_071526626.png)
Конечно же если выделять вне видимости - тут то и жопа: как переместив фокус на нужный элемент (не путайте с фокусом виджета) - думаю все соскролится на него.


Название: Re: tableView и autoScroll
Отправлено: Flakes от Октября 09, 2008, 06:42
Я вижу одно решение. Оказывается scrollTo(const QModelIndex & index) (http://doc.trolltech.com/4.4/qabstractitemview.html#scrollTo) умеет скролить по нужному индексу (как я сразу не заметил), но это виртуальный метод [pure virtual]. Это значит нужно наследовать QTableView и самому реализовывать его? И тут я застреваю...

Объясните кто-нить мне балбесу, зачем такие виртуальные методы, если ни в одном классе, наследующим базовый QAbstractItemView, они не реализованы?


Название: Re: tableView и autoScroll
Отправлено: denka от Октября 09, 2008, 09:27
Я вижу одно решение. Оказывается scrollTo(const QModelIndex & index) (http://doc.trolltech.com/4.4/qabstractitemview.html#scrollTo) умеет скролить по нужному индексу (как я сразу не заметил), но это виртуальный метод [pure virtual]. Это значит нужно наследовать QTableView и самому реализовывать его? И тут я застреваю...
Сей метод чисто виртуальный только у QAbstractItemView. У наследников же этого класса эти ф-ции даже очень реализованы. Если бы это было не так, то не возможно было создавать экземпляры этих объектов, т.к. С++ не допускает создание экземпляров классов с чисто виртуальными методами.


Название: Re: tableView и autoScroll
Отправлено: Flakes от Октября 09, 2008, 20:10
Так и есть, мне было лень даже проверить :) Проблема решена тогда...

UPD: В совокупности методов этих методов все теперь как надо:
Код:
view->verticalScrollBar()->setValue();
view->scrollTo();
view->setCurrentIndex();