Название: программно выделить несколько строк в 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!!! Пожалуйста, сам этим сайтом одно время активно пользовался :) |