Название: drag и drop в наследнике QSortFilterProxyModel Отправлено: neosapient от Сентябрь 30, 2015, 01:40 Здравствуйте.
Надо перетаскивать строчки в таблице. По условиям задачи делаю таблицу, в которой надо таскать строчки. Таблица состоит из прокси модели и QTableView. Прокси модель сделал как наследник QSortFilterProxyModel и переопределил в ней функцию сортировки. Так же сохраняю "веса" строчек в структуре типа QMap<>, в случае если их перетаскивал пользователь. В прокси модели переопределяю метод dropMimeData(..., int row, int column, ...). Проблема: Во время запуска программы, когда перетаскиваю строчку по таблице, то строка удаляется из базовой модели. Почему? И как исправить? P.S. Задание выглядит несколько сложнее. Есть QStandardItemModel - в ней основные данные. Так же в ней можно ставить галочки. Далее идет моя прокси модель, которая показывает отфильтрованные строчки. Т.е. есть 1000 строчек в базовой модели, но только напротив 10 стоят галочки. Вот эти 10 строчек надо показывать в отдельной таблице и позволять пользователю перетасовывать строчки между собой. Как я понял, при перетаскивании строк - для старого положения строки вызывается removeRows() автоматически, - внутри dropMimeData() надо вызывать insertRows() вручную. Проблема в том, что мне надо менять положение строки, а не удалять её из базовой модели. Казалось бы, мне надо переопределить removeRows(), но тогда как я узнаю кто и из-за чего вызвал removeRows()? Ведь - если это перетаскивание строки, то надо менять индекс (ок, пусть даже удалить старую строчку и вставить её, но только из прокси модели, не из базовой модели) - а если это в базовой модели сняли галочку, то должен отработать фильтр, который удаляет строчку только из прокси модели. Если знаете готовый пример, пожалуйста, приведите его. Спасибо. ---- Уже думаю, что надо делать свою прокси модель. Название: Re: drag и drop в наследнике QSortFilterProxyModel Отправлено: Igors от Сентябрь 30, 2015, 06:38 Имел схожие проблемы (без сортировки). См тему "Перетаскивание строк в таблице"
Название: Re: drag и drop в наследнике QSortFilterProxyModel Отправлено: neosapient от Сентябрь 30, 2015, 12:06 Здравствуйте, Igors.
По форуму темы с подобным именем не нашел. В интернете нашел рабочий пример, но только с базовой моделью (без прокси модели). Нашел ещё вчера, задолго до написания вопроса. Как я понимаю, текущая проблема с наследником от QSortFilterProxyModel зависит от неправильной отработки removeRows() применительно к моей ситуации. Т.е. вместо того, чтобы удалить строчку в прокси-модели, удаляется строчка из базовой модели. Название: Re: drag и drop в наследнике QSortFilterProxyModel Отправлено: Igors от Сентябрь 30, 2015, 12:12 По форуму темы с подобным именем не нашел. Виноват, "перетасовка строк в таблице", вот она (http://www.prog.org.ru/index.php?topic=29013.msg212713#msg212713). В 2 словах - мучился, плюнул и написал великНазвание: Re: drag и drop в наследнике QSortFilterProxyModel Отправлено: YvenTitan от Январь 20, 2016, 13:59 Здравствуйте.
Необходимо перетаскивать строки в таблице, отсортированной по алфавиту, по второму столбцу (см. рисунок). В данный момент строка вставляется по очень плохо понятному мне принципу. Тест делаю такой: после запуска для сотртровки нажимаю на заголовок "Переменная", после этого перетаскиваю строку (непонятно мне ведет себя, если 4 строку перетаскиваю на 3, 7->9, и тд) Как сделать, чтобы при сортировке строка перемещалась над той, на которую опускаю? |