![]() |
Здравствуйте, гость ( Вход | Регистрация )
![]() ![]() |
![]() |
Анна |
![]()
Сообщение
#1
|
![]() Активный участник ![]() ![]() ![]() Группа: Участник Сообщений: 276 Регистрация: 22.5.2008 Из: Зеленоград Пользователь №: 181 Спасибо сказали: 30 раз(а) Репутация: ![]() ![]() ![]() |
Получаю от вьювера
Хотелось бы удалить выбранные элементы, но беда в том, что в list они стоят в том порядке, в каком выделялись во вьювере (задан режим MultySelection), что не позволяет удалять в цикле, т.к. удаление элемента с меньшим индексом делает другие индексы невалидными. Может, кто знает, как по-быстрому и красиво решить эту проблему? Или нужно после каждого удаления перезапрашивать ui.TableView->selectionModel(); ? |
|
|
igor_bogomolov |
![]()
Сообщение
#2
|
Профессионал ![]() ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 1215 Регистрация: 22.3.2009 Из: Саратов Пользователь №: 630 Спасибо сказали: 235 раз(а) Репутация: ![]() ![]() ![]() |
Для QModelIndex перегружен оператор меньше (<), т.ч. QModelIndexList можно отсортировать при помощи qSort. А затем уже удалять в цикле.
|
|
|
Litkevich Yuriy |
![]()
Сообщение
#3
|
![]() разработчик РЭА ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: ![]() ![]() ![]() |
Анна, я использую такой код:
никогда не было проблем
|
|
|
Анна |
![]()
Сообщение
#4
|
![]() Активный участник ![]() ![]() ![]() Группа: Участник Сообщений: 276 Регистрация: 22.5.2008 Из: Зеленоград Пользователь №: 181 Спасибо сказали: 30 раз(а) Репутация: ![]() ![]() ![]() |
Litkevich Yuriy, проблема возникает в том случае, когда в sm хранятся индексы, например, в такой последовательности 9, 1 , 5 (пусть это будут номера рядов). 9 удаляется без проблем, а вот, когда удаляется 1, на месте 5-го уже находится элемент, который стоял на 6-месте. Ну и дальше понятно, чо происходит.
Или дело в сигналах beforeDelete() и deleted()? Пока сигнал deleted() не пришёл, никаких подвижек в модели не происходит и все индексы истинны? Вообще, у них что-то сказано про индексы, когда они истинны, а когда уже нет, но я это место как-то смутно поняла. Сообщение отредактировал Анна - 28.7.2010, 8:28 |
|
|
Litkevich Yuriy |
![]()
Сообщение
#5
|
![]() разработчик РЭА ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: ![]() ![]() ![]() |
вообще я использую модель QSqlTableModel и политику ManualSubmit, поэтому с индексами ничего не происходит. Т.к. данные не удаляются сразу и это не приводит к перестраиванию индексов.
Если у тебя не возможно реализовать такой вариант, то нужно из индексов получить постоянные индексы, и только потом начинать удаление. Примерно так:
|
|
|
Анна |
![]()
Сообщение
#6
|
![]() Активный участник ![]() ![]() ![]() Группа: Участник Сообщений: 276 Регистрация: 22.5.2008 Из: Зеленоград Пользователь №: 181 Спасибо сказали: 30 раз(а) Репутация: ![]() ![]() ![]() |
С QPersistentModelIndex вроде бы получилось. Спасибо!
|
|
|
![]() ![]() ![]() |
![]() |
Текстовая версия | Сейчас: 2.3.2025, 20:53 |