Russian Qt Forum

Qt => Базы данных => Тема начата: mokynis от Январь 22, 2010, 15:34



Название: переход на измененную запись в QTableView
Отправлено: mokynis от Январь 22, 2010, 15:34
Замучился уже-помогите сделать проще. Имеется форма, на ней QTableView (tab_view), связанная с SqlQueryModel (model). В модель выбраны данные из кучи таблиц, поэтому редактирую в lineEdit'ах и ComboBox'ах, расположенных на форме. Задача- после редактирования (или удаления) "подсветить" в tab_view ту запись, которая редактировалась (или предыдущую, если запись удалялась). Дело в том, что модель заполняется отсортированными (причем может быть сортировка по разным полям) данными. После поисков где только можно получилось что-то заумное:
после изменения текущей строки форма подает сигнал с аргументом=нужному id
сигнал принимает слот модели, где перебираются все строки, пока не получится data(index)==id
после этого модель подает сигнал с № записи в текущей выборке
его принимает форма и "подсвечивает" нужную строку tab_view->selectRow(number)

Может, как-то по-проще можно? А то ужас какой-то вышел
(Qt4.3.2)


Название: Re: переход на измененную запись в QTableView
Отправлено: crossly от Январь 23, 2010, 14:56
может просто перед обновлением запоминать QModelIndex ..... после обновления переходить на него...


Название: Re: переход на измененную запись в QTableView
Отправлено: DS_tm от Январь 23, 2010, 16:35
Можно отлавливать сигнал dataChanged от модели, и по измененным индексам подсвечивать вьюху.


Название: Re: переход на измененную запись в QTableView
Отправлено: NicK от Январь 24, 2010, 21:28
Вот так я выделяю ряд(intLastKnownSelectedRow) и перехожу к нему в QTreeView. В QTableView принцип тот же.
Цитировать
for (int i=0;i<model->columnCount();++i) TV->selectionModel()->select(model->index(intLastKnownSelectedRow, i), QItemSelectionModel::Select);
TV->selectionModel()->setCurrentIndex(model->index(intLastKnownSelectedRow, 0),QItemSelectionModel::Select);
TV->scrollTo(model->index(intLastKnownSelectedRow,0),QAbstractItemView::PositionAtCenter);


Название: Re: переход на измененную запись в QTableView
Отправлено: mokynis от Январь 26, 2010, 09:06
спасибо за подсказки, но в моем случае надо подсвечивать строку с неизвестно каким индексом: может быть не только изменение, но и вставка новой записи, а модель обновляется в зависимости от заранее установленной сортировки=> измененная запись тоже может оказаться где угодно. Ладно, буду делать свое корявое выделение.


Название: Re: переход на измененную запись в QTableView
Отправлено: DS_tm от Январь 26, 2010, 11:54
спасибо за подсказки, но в моем случае надо подсвечивать строку с неизвестно каким индексом: может быть не только изменение, но и вставка новой записи, а модель обновляется в зависимости от заранее установленной сортировки=> измененная запись тоже может оказаться где угодно. Ладно, буду делать свое корявое выделение.

Для вставки можно также перехватывать rowsInserted. На счет сортировки, Вы не правы, сортировка QTableView осуществляеться прозрачно, тоесть QItemSelectionModel спокойно подсвечивает нужные индексы, полученные от модели. Если же используеться прохси модель, то корректный индекс можно получить с помощью функций mapToSource/mapFromSource.