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