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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: [РЕШЕНО] как правильно обновить представление QTablView  (Прочитано 5835 раз)
slava_d200
Гость
« : Апрель 08, 2012, 02:49 »

Прошу подсказки.
программно устанавливаю активную строку в QTablView

если эта строка в зоне отображения то все хорошо, а если эта строка в не зоне отображения
то QTablView не показывает ее. Что надо сделать чтобы автоматом проходила прокрутка до выбранной строки.

и второй вопрос.
QTablView настроен на выделение всей строки.

но если я устанавливаю программно активную ячейку, выделяется тока эта ячейка а не вся строка.
как сделать чтобы выделялась вся строка ?
« Последнее редактирование: Апрель 08, 2012, 14:38 от slava_d200 » Записан
V1KT0P
Гость
« Ответ #1 : Апрель 08, 2012, 03:06 »

но если я устанавливаю программно активную ячейку, выделяется тока эта ячейка а не вся строка.
как сделать чтобы выделялась вся строка ?
Код
C++ (Qt)
void QTableView::selectRow( int row )
Записан
slava_d200
Гость
« Ответ #2 : Апрель 08, 2012, 03:10 »

но если я устанавливаю программно активную ячейку, выделяется тока эта ячейка а не вся строка.
как сделать чтобы выделялась вся строка ?
Код
C++ (Qt)
void QTableView::selectRow( int row )

СПАСИБО
помогло.
Записан
V1KT0P
Гость
« Ответ #3 : Апрель 08, 2012, 03:12 »

но если я устанавливаю программно активную ячейку, выделяется тока эта ячейка а не вся строка.
как сделать чтобы выделялась вся строка ?
Код
C++ (Qt)
void QTableView::selectRow( int row )

СПАСИБО
помогло.
Можешь еще добавить:
Код
C++ (Qt)
QTableView->scrollTo(QTableView->currentIndex());
Ибо в QTableWidget например не скролит до строки если она уже выделена, даже если за пределом видимой части.
Записан
slava_d200
Гость
« Ответ #4 : Апрель 08, 2012, 03:15 »

еще раз СПАСИБО.

тока теперь встал вопрос.
а как определить выделенная строка находится в зоне видимости или нет?

Записан
V1KT0P
Гость
« Ответ #5 : Апрель 08, 2012, 04:02 »

еще раз СПАСИБО.

тока теперь встал вопрос.
а как определить выделенная строка находится в зоне видимости или нет?


Если делать правильно, то наверно надо наследоваться и добавлять функцию(ибо я что-то не вижу функцию которая возвращает видимую внутреннюю область). Но можно вот такой костыль использовать:
Код
C++ (Qt)
int visibleVerticalCount = QTablView->rowCount() - QTablView->verticalScrollBar()->maximum();
int visibleStart = QTablView->verticalScrollBar()->value();
int visibleEnd = QTablView->verticalScrollBar()->value() + visibleVerticalCount;
В итоге мы получим значения с какой по какую строку видно. Но только если нижняя строка хоть на пиксель отрисовывается, то будет считаться что она видна.
Записан
Bepec
Гость
« Ответ #6 : Апрель 08, 2012, 09:18 »

Помоему гораздо проще крутить каждый раз
Код:
QTableView->scrollTo(QTableView->currentIndex());

Там жеж 3 варианта прокрутки - попиксельно, поитемно и ещё какой то Подмигивающий

Если будет выделяться не чаще чем раз в 300 мс, то тормозов и лагов не будет Подмигивающий
Записан
slava_d200
Гость
« Ответ #7 : Апрель 08, 2012, 10:58 »

немогу понять.
если список большой
и я позициирую к примеру 3-ю строку.

то в некоторых случаях выделенная строка отображается самой первой и убирает верхнии 2-е строки.
а в некоторых случаях при таких же манипуляциях.

выделенная строка отображается третьей в списке и не прячет первые две строки.
Записан
V1KT0P
Гость
« Ответ #8 : Апрель 08, 2012, 12:07 »

немогу понять.
если список большой
и я позициирую к примеру 3-ю строку.

то в некоторых случаях выделенная строка отображается самой первой и убирает верхнии 2-е строки.
а в некоторых случаях при таких же манипуляциях.

выделенная строка отображается третьей в списке и не прячет первые две строки.
Замени это:
Код
C++ (Qt)
QTablView->scrollTo(QTablView->currentIndex());
на это:
Код
C++ (Qt)
int row = QTablView->currentRow();
if (row > QTablView->verticalScrollBar()->maximum())
   row = QTablView->verticalScrollBar()->maximum();
QTablView->verticalScrollBar()->setValue(row);
Теперь строка будет всегда вверху, если это возможно.
Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #9 : Апрель 08, 2012, 12:24 »

Внимательно смотрим второй аргумент QAbstractItemView::ScrollHint:
Код
C++ (Qt)
void QAbstractItemView::scrollTo( const QModelIndex& index, ScrollHint hint = EnsureVisible )
и не городим огород)
Записан

Qt 5.11/4.8.7 (X11/Win)
slava_d200
Гость
« Ответ #10 : Апрель 08, 2012, 14:38 »

Внимательно смотрим второй аргумент QAbstractItemView::ScrollHint:
Код
C++ (Qt)
void QAbstractItemView::scrollTo( const QModelIndex& index, ScrollHint hint = EnsureVisible )
и не городим огород)

все получилось!!!!

большое СПАСИБО всем откликнувшимся.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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