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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: программно выделить несколько строк в QTableView  (Прочитано 10531 раз)
Vladimir
Крякер
****
Offline Offline

Сообщений: 305



Просмотр профиля
« : Ноябрь 12, 2014, 16:29 »

Доброго дня! если выделять selectRow(index) каждую строчку, то при наличии больше 200-300 строк процесс очень тормозится. как это можно сделать за один раз? selectAll(); делает выделение быстро, но мне нужно выделять не все, а только выбранные строки.
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


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


Просмотр профиля WWW
« Ответ #1 : Ноябрь 12, 2014, 16:31 »

Смотри в сторону QTableView::selectionModel ().
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
Vladimir
Крякер
****
Offline Offline

Сообщений: 305



Просмотр профиля
« Ответ #2 : Ноябрь 12, 2014, 16:37 »

Смотри в сторону QTableView::selectionModel ().

у меня есть QItemSelectionModel selectModel, есть места где она мне возвращает список выделенных строк (индексы)
QModelIndexList indexes = selectModel->selectedRows(); но как с ее помощью выделить несколько строк я не нашел.
Записан
vulko
Гость
« Ответ #3 : Ноябрь 12, 2014, 16:46 »

Цитировать
программно выделить несколько строк в QTableView
и
Цитировать
при наличии больше 200-300 строк процесс очень тормозится

не особо стыкуются... Улыбающийся


попробуй

void QTableView::setSelection ( const QRect & rect, QItemSelectionModel::SelectionFlags flags ) [virtual protected]

Но тут придется вычислить QRect для выделения.
Записан
Vladimir
Крякер
****
Offline Offline

Сообщений: 305



Просмотр профиля
« Ответ #4 : Ноябрь 12, 2014, 16:56 »

Цитировать
программно выделить несколько строк в QTableView
и
Цитировать
при наличии больше 200-300 строк процесс очень тормозится

не особо стыкуются... Улыбающийся


попробуй

void QTableView::setSelection ( const QRect & rect, QItemSelectionModel::SelectionFlags flags ) [virtual protected]

Но тут придется вычислить QRect для выделения.

да, имелось ввиду несколько десятков строк) а как правильно будет рассчитать эту область?
Записан
gil9red
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1805



Просмотр профиля WWW
« Ответ #5 : Ноябрь 12, 2014, 18:20 »

Смотри в сторону QTableView::selectionModel ().

у меня есть QItemSelectionModel selectModel, есть места где она мне возвращает список выделенных строк (индексы)
QModelIndexList indexes = selectModel->selectedRows(); но как с ее помощью выделить несколько строк я не нашел.

selectionModel нужна не только чтобы получить список выделенных строк Улыбающийся
у selectionModel есть метод select, который принимает ссылку на QItemSelection, а тот позволяет указать область выделения с помощью своего метода select Улыбающийся
Записан

Vladimir
Крякер
****
Offline Offline

Сообщений: 305



Просмотр профиля
« Ответ #6 : Ноябрь 12, 2014, 19:04 »

Смотри в сторону QTableView::selectionModel ().

у меня есть QItemSelectionModel selectModel, есть места где она мне возвращает список выделенных строк (индексы)
QModelIndexList indexes = selectModel->selectedRows(); но как с ее помощью выделить несколько строк я не нашел.

selectionModel нужна не только чтобы получить список выделенных строк Улыбающийся
у selectionModel есть метод select, который принимает ссылку на QItemSelection, а тот позволяет указать область выделения с помощью своего метода select Улыбающийся

хорошо.. получается последний select принимает на вход верхний левый индекс выделения и правый нижний, т.е. все индексы в этой области, правильно я понимаю? а если по условиям выделения мне нужно выделить скажем 1,3,10,41,42,43,70,71.. строки, не сплошной массив строк, тогда как?
Записан
gil9red
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1805



Просмотр профиля WWW
« Ответ #7 : Ноябрь 12, 2014, 19:15 »

Тогда, вручную указывайте, например, с помощью void QItemSelectionModel::select ( const QModelIndex & index, QItemSelectionModel::SelectionFlags command )
Записан

Vladimir
Крякер
****
Offline Offline

Сообщений: 305



Просмотр профиля
« Ответ #8 : Ноябрь 12, 2014, 19:21 »

Тогда, вручную указывайте, например, с помощью void QItemSelectionModel::select ( const QModelIndex & index, QItemSelectionModel::SelectionFlags command )

а это не будет тоже самое, что выделять selectRow(int row) у QTableView? т.е. получается все равно нужно пробегаться и по ОДНОЙ строчке выделять..
Записан
gil9red
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1805



Просмотр профиля WWW
« Ответ #9 : Ноябрь 12, 2014, 19:30 »

Тогда, вручную указывайте, например, с помощью void QItemSelectionModel::select ( const QModelIndex & index, QItemSelectionModel::SelectionFlags command )

а это не будет тоже самое, что выделять selectRow(int row) у QTableView? т.е. получается все равно нужно пробегаться и по ОДНОЙ строчке выделять..

Сами посмотрите и сравните: http://code.woboq.org/qt5/qtbase/src/widgets/itemviews/qtableview.cpp.html#_ZN17QTableViewPrivate9selectRowEib  Улыбающийся Подмигивающий
Записан

Vladimir
Крякер
****
Offline Offline

Сообщений: 305



Просмотр профиля
« Ответ #10 : Ноябрь 12, 2014, 19:41 »

Тогда, вручную указывайте, например, с помощью void QItemSelectionModel::select ( const QModelIndex & index, QItemSelectionModel::SelectionFlags command )

а это не будет тоже самое, что выделять selectRow(int row) у QTableView? т.е. получается все равно нужно пробегаться и по ОДНОЙ строчке выделять..

Сами посмотрите и сравните: http://code.woboq.org/qt5/qtbase/src/widgets/itemviews/qtableview.cpp.html#_ZN17QTableViewPrivate9selectRowEib  Улыбающийся Подмигивающий

мда..попробовал. получилось чуть меньше, но это только из-за того, что выделился только первый столбец, а нужно выделять строку.. (там больше одного столбца), т.е. выделять все индексы строки и в итоге получится тоже самое, если даже не медленнее. засада  Непонимающий есть еще какие варианты?
Записан
Vladimir
Крякер
****
Offline Offline

Сообщений: 305



Просмотр профиля
« Ответ #11 : Ноябрь 12, 2014, 19:47 »

А ссылочка отличная, удобно читать исходники. Спасибо gil9red!!!
Записан
gil9red
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1805



Просмотр профиля WWW
« Ответ #12 : Ноябрь 12, 2014, 19:52 »

А ссылочка отличная, удобно читать исходники. Спасибо gil9red!!!

Пожалуйста, сам этим сайтом одно время активно пользовался Улыбающийся
Записан

Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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