Russian Qt Forum
Ноябрь 01, 2024, 08:33
Добро пожаловать,
Гость
. Пожалуйста,
войдите
или
зарегистрируйтесь
.
Вам не пришло
письмо с кодом активации?
1 час
1 день
1 неделя
1 месяц
Навсегда
Войти
Начало
Форум
WIKI (Вики)
FAQ
Помощь
Поиск
Войти
Регистрация
Russian Qt Forum
>
Forum
>
Qt
>
Model-View (MV)
>
drag и drop в наследнике QSortFilterProxyModel
Страниц: [
1
]
Вниз
« предыдущая тема
следующая тема »
Печать
Автор
Тема: drag и drop в наследнике QSortFilterProxyModel (Прочитано 4149 раз)
neosapient
Гость
drag и drop в наследнике QSortFilterProxyModel
«
:
Сентябрь 30, 2015, 01:40 »
Здравствуйте.
Надо перетаскивать строчки в таблице.
По условиям задачи делаю таблицу, в которой надо таскать строчки. Таблица состоит из прокси модели и QTableView.
Прокси модель сделал как наследник QSortFilterProxyModel и переопределил в ней функцию сортировки. Так же сохраняю "веса" строчек в структуре типа QMap<>, в случае если их перетаскивал пользователь.
В прокси модели переопределяю метод dropMimeData(..., int row, int column, ...).
Проблема: Во время запуска программы, когда перетаскиваю строчку по таблице, то строка удаляется из базовой модели.
Почему? И как исправить?
P.S.
Задание выглядит несколько сложнее.
Есть QStandardItemModel - в ней основные данные. Так же в ней можно ставить галочки.
Далее идет моя прокси модель, которая показывает отфильтрованные строчки. Т.е. есть 1000 строчек в базовой модели, но только напротив 10 стоят галочки. Вот эти 10 строчек надо показывать в отдельной таблице и позволять пользователю перетасовывать строчки между собой.
Как я понял, при перетаскивании строк
- для старого положения строки вызывается removeRows() автоматически,
- внутри dropMimeData() надо вызывать insertRows() вручную.
Проблема в том, что мне надо менять положение строки, а не удалять её из базовой модели.
Казалось бы, мне надо переопределить removeRows(), но тогда как я узнаю кто и из-за чего вызвал removeRows()? Ведь
- если это перетаскивание строки, то надо менять индекс (ок, пусть даже удалить старую строчку и вставить её, но только из прокси модели, не из базовой модели)
- а если это в базовой модели сняли галочку, то должен отработать фильтр, который удаляет строчку только из прокси модели.
Если знаете готовый пример, пожалуйста, приведите его.
Спасибо.
----
Уже думаю, что надо делать свою прокси модель.
«
Последнее редактирование: Сентябрь 30, 2015, 01:48 от neosapient
»
Записан
Igors
Джедай : наставник для всех
Offline
Сообщений: 11445
Re: drag и drop в наследнике QSortFilterProxyModel
«
Ответ #1 :
Сентябрь 30, 2015, 06:38 »
Имел схожие проблемы (без сортировки). См тему "Перетаскивание строк в таблице"
Записан
neosapient
Гость
Re: drag и drop в наследнике QSortFilterProxyModel
«
Ответ #2 :
Сентябрь 30, 2015, 12:06 »
Здравствуйте, Igors.
По форуму темы с подобным именем не нашел.
В интернете нашел рабочий пример, но только с базовой моделью (без прокси модели). Нашел ещё вчера, задолго до написания вопроса.
Как я понимаю, текущая проблема с наследником от QSortFilterProxyModel зависит от неправильной отработки removeRows() применительно к моей ситуации. Т.е. вместо того, чтобы удалить строчку в прокси-модели, удаляется строчка из базовой модели.
Записан
Igors
Джедай : наставник для всех
Offline
Сообщений: 11445
Re: drag и drop в наследнике QSortFilterProxyModel
«
Ответ #3 :
Сентябрь 30, 2015, 12:12 »
Цитата: neosapient от Сентябрь 30, 2015, 12:06
По форуму темы с подобным именем не нашел.
Виноват, "перетасовка строк в таблице", вот
она
. В 2 словах - мучился, плюнул и написал велик
Записан
YvenTitan
Самовар
Offline
Сообщений: 174
Re: drag и drop в наследнике QSortFilterProxyModel
«
Ответ #4 :
Январь 20, 2016, 13:59 »
Здравствуйте.
Необходимо перетаскивать строки в таблице, отсортированной по алфавиту, по второму столбцу (см. рисунок).
В данный момент строка вставляется по очень плохо понятному мне принципу.
Тест делаю такой: после запуска для сотртровки нажимаю на заголовок "Переменная", после этого перетаскиваю строку (непонятно мне ведет себя, если 4 строку перетаскиваю на 3, 7->9, и тд)
Как сделать, чтобы при сортировке строка перемещалась над той, на которую опускаю?
Записан
Страниц: [
1
]
Вверх
Печать
« предыдущая тема
следующая тема »
Перейти в:
Пожалуйста, выберите назначение:
-----------------------------
Qt
-----------------------------
=> Вопросы новичков
=> Уроки и статьи
=> Установка, сборка, отладка, тестирование
=> Общие вопросы
=> Пользовательский интерфейс (GUI)
=> Qt Quick
=> Model-View (MV)
=> Базы данных
=> Работа с сетью
=> Многопоточное программирование, процессы
=> Мультимедиа
=> 2D и 3D графика
=> OpenGL
=> Печать
=> Интернационализация, локализация
=> QSS
=> XML
=> Qt Script, QtWebKit
=> ActiveX
=> Qt Embedded
=> Дополнительные компоненты
=> Кладовая готовых решений
=> Вклад сообщества в Qt
=> Qt-инструментарий
-----------------------------
Программирование
-----------------------------
=> Общий
=> С/C++
=> Python
=> Алгоритмы
=> Базы данных
=> Разработка игр
-----------------------------
Компиляторы и платформы
-----------------------------
=> Linux
=> Windows
=> Mac OS X
=> Компиляторы
===> Visual C++
-----------------------------
Разное
-----------------------------
=> Новости
===> Новости Qt сообщества
===> Новости IT сферы
=> Говорилка
=> Юмор
=> Объявления
Загружается...