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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Перемещение строчек beginMoveRows, endMoveRows  (Прочитано 6624 раз)
neosapient
Гость
« : Июнь 25, 2010, 14:57 »

Здравствуйте.

Переписал пример %QTDIR\examples\itemviews\editabletreemodel, так чтобы перемещать строчки внути модели (исходник прикреплен к посту).
- создал два пункта меню: "Move Row Up" и "Move Row Down"
- перенаправил нажатие от этих пунктов меню на слоты: MainWindow::moveRowUp() и MainWindow::moveRowDown()
- оттуда происходит вызов метода модели TreeModel::moveRows, с указанием номера строки, которую следует переместить, а так же её "родителя".
- внутри метода модели происходит три операции
  * beginMoveRows() - блокируем кусок модели
  * TreeItem::moveChildren() - перемещаем элемент
  * endMoveRows() - освобождаем кусок мождели

Собственно всё работает, но не для каждой строчки:
- для первых двух строчек относительно корня выпадает ошибка/исключение.
- все остальные строчки кроме первых двух прекрасно перемещаются между собой

Причем ошибка для первых двух строчек возникает только при исполнении метода endMoveRows()  Непонимающий

В чем может быть причина ?

QT 4.6.2
« Последнее редактирование: Июнь 25, 2010, 15:04 от neosapient » Записан
AlekseyK
Гость
« Ответ #1 : Январь 04, 2020, 02:33 »

Вот тут есть решение: https://stackoverflow.com/a/43683619/630169 - двигать вперёд нужно на 2 строчки - иначе крэш, в документации beginMoveRows объяснено почему: https://doc.qt.io/qt-5/qabstractitemmodel.html#beginMoveRows
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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