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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: переход на измененную запись в QTableView  (Прочитано 5224 раз)
mokynis
Самовар
**
Offline Offline

Сообщений: 176


Просмотр профиля
« : Январь 22, 2010, 15:34 »

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

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

QT4, Qt5, Qt6 Debian, ArchLinux
crossly
Гость
« Ответ #1 : Январь 23, 2010, 14:56 »

может просто перед обновлением запоминать QModelIndex ..... после обновления переходить на него...
Записан
DS_tm
Гость
« Ответ #2 : Январь 23, 2010, 16:35 »

Можно отлавливать сигнал dataChanged от модели, и по измененным индексам подсвечивать вьюху.
Записан
NicK
Гость
« Ответ #3 : Январь 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);
Записан
mokynis
Самовар
**
Offline Offline

Сообщений: 176


Просмотр профиля
« Ответ #4 : Январь 26, 2010, 09:06 »

спасибо за подсказки, но в моем случае надо подсвечивать строку с неизвестно каким индексом: может быть не только изменение, но и вставка новой записи, а модель обновляется в зависимости от заранее установленной сортировки=> измененная запись тоже может оказаться где угодно. Ладно, буду делать свое корявое выделение.
Записан

QT4, Qt5, Qt6 Debian, ArchLinux
DS_tm
Гость
« Ответ #5 : Январь 26, 2010, 11:54 »

спасибо за подсказки, но в моем случае надо подсвечивать строку с неизвестно каким индексом: может быть не только изменение, но и вставка новой записи, а модель обновляется в зависимости от заранее установленной сортировки=> измененная запись тоже может оказаться где угодно. Ладно, буду делать свое корявое выделение.

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


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