Russian Qt Forum

Qt => Model-View (MV) => Тема начата: neosapient от Июнь 25, 2010, 14:57



Название: Перемещение строчек beginMoveRows, endMoveRows
Отправлено: 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


Название: Re: Перемещение строчек beginMoveRows, endMoveRows
Отправлено: AlekseyK от Январь 04, 2020, 02:33
Вот тут есть решение: https://stackoverflow.com/a/43683619/630169 - двигать вперёд нужно на 2 строчки - иначе крэш, в документации beginMoveRows объяснено почему: https://doc.qt.io/qt-5/qabstractitemmodel.html#beginMoveRows