Russian Qt Forum

Qt => Model-View (MV) => Тема начата: Vladimir от Ноябрь 12, 2014, 16:29



Название: программно выделить несколько строк в QTableView
Отправлено: Vladimir от Ноябрь 12, 2014, 16:29
Доброго дня! если выделять selectRow(index) каждую строчку, то при наличии больше 200-300 строк процесс очень тормозится. как это можно сделать за один раз? selectAll(); делает выделение быстро, но мне нужно выделять не все, а только выбранные строки.


Название: Re: программно выделить несколько строк в QTableView
Отправлено: Пантер от Ноябрь 12, 2014, 16:31
Смотри в сторону QTableView::selectionModel ().


Название: Re: программно выделить несколько строк в QTableView
Отправлено: Vladimir от Ноябрь 12, 2014, 16:37
Смотри в сторону QTableView::selectionModel ().

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


Название: Re: программно выделить несколько строк в QTableView
Отправлено: vulko от Ноябрь 12, 2014, 16:46
Цитировать
программно выделить несколько строк в QTableView
и
Цитировать
при наличии больше 200-300 строк процесс очень тормозится

не особо стыкуются... :)


попробуй

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

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


Название: Re: программно выделить несколько строк в QTableView
Отправлено: Vladimir от Ноябрь 12, 2014, 16:56
Цитировать
программно выделить несколько строк в QTableView
и
Цитировать
при наличии больше 200-300 строк процесс очень тормозится

не особо стыкуются... :)


попробуй

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

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

да, имелось ввиду несколько десятков строк) а как правильно будет рассчитать эту область?


Название: Re: программно выделить несколько строк в QTableView
Отправлено: gil9red от Ноябрь 12, 2014, 18:20
Смотри в сторону QTableView::selectionModel ().

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

selectionModel нужна не только чтобы получить список выделенных строк :)
у selectionModel есть метод select (http://qt-project.org/doc/qt-4.8/qitemselectionmodel.html#select-2), который принимает ссылку на QItemSelection (http://qt-project.org/doc/qt-4.8/qitemselection.html), а тот позволяет указать область выделения с помощью своего метода select (http://qt-project.org/doc/qt-4.8/qitemselection.html#select) :)


Название: Re: программно выделить несколько строк в QTableView
Отправлено: Vladimir от Ноябрь 12, 2014, 19:04
Смотри в сторону QTableView::selectionModel ().

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

selectionModel нужна не только чтобы получить список выделенных строк :)
у selectionModel есть метод select (http://qt-project.org/doc/qt-4.8/qitemselectionmodel.html#select-2), который принимает ссылку на QItemSelection (http://qt-project.org/doc/qt-4.8/qitemselection.html), а тот позволяет указать область выделения с помощью своего метода select (http://qt-project.org/doc/qt-4.8/qitemselection.html#select) :)

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


Название: Re: программно выделить несколько строк в QTableView
Отправлено: gil9red от Ноябрь 12, 2014, 19:15
Тогда, вручную указывайте, например, с помощью void QItemSelectionModel::select ( const QModelIndex & index, QItemSelectionModel::SelectionFlags command )


Название: Re: программно выделить несколько строк в QTableView
Отправлено: Vladimir от Ноябрь 12, 2014, 19:21
Тогда, вручную указывайте, например, с помощью void QItemSelectionModel::select ( const QModelIndex & index, QItemSelectionModel::SelectionFlags command )

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


Название: Re: программно выделить несколько строк в QTableView
Отправлено: gil9red от Ноябрь 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  :) ;)


Название: Re: программно выделить несколько строк в QTableView
Отправлено: Vladimir от Ноябрь 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  :) ;)

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


Название: Re: программно выделить несколько строк в QTableView
Отправлено: Vladimir от Ноябрь 12, 2014, 19:47
А ссылочка отличная, удобно читать исходники. Спасибо gil9red!!!


Название: Re: программно выделить несколько строк в QTableView
Отправлено: gil9red от Ноябрь 12, 2014, 19:52
А ссылочка отличная, удобно читать исходники. Спасибо gil9red!!!

Пожалуйста, сам этим сайтом одно время активно пользовался :)