Название: [РЕШЕНО]И снова QTableView Отправлено: Larry от Февраль 05, 2016, 18:08 Добрый день.
Снова возникла проблема с QTableView, вернее с моделью... Переделал хранилище данных с vector на map и теперь постоянно при удалении исключение. В методе модели data вызывается индекс 0, хотя его уже нет...Почему так происходит? хранилище это map<int, QData> (QData это класс в котором хранится вектор со строками). Вот так удаляю: Код: void TableView::removeRow(const QModelIndex &index) а вот data: Код: QVariant TableView::data(const QModelIndex& index, int role) const Название: Re: И снова QTableView Отправлено: kambala от Февраль 05, 2016, 20:02 если удалить строчку 0, то строчкой 0 станет строчка 1. вектор же сдвигает индексы после удаления, а словарь — нет.
Название: Re: И снова QTableView Отправлено: gil9red от Февраль 05, 2016, 20:17 А тот словарь вообще гарантирует, что порядок ключей будет такой же как и при добавлении? :)
Словари часто ключи хранят как хеши, из-за чего порядок не гарантируется Название: Re: И снова QTableView Отправлено: Larry от Февраль 05, 2016, 21:34 Да это я чего-то не того спорол, но вышел на свежий воздух и понял:). Тогда вопрос, а как лучше сделать, чтобы можно было удалять данные. До этого делал через vector и сортировал по убыванию индексы. А можно как-то сделать без сортировки?
Название: Re: И снова QTableView Отправлено: kambala от Февраль 05, 2016, 22:01 А тот словарь вообще гарантирует, что порядок ключей будет такой же как и при добавлении? :) там же написано map, что гарантирует порядок (сортируется по ключам)Словари часто ключи хранят как хеши, из-за чего порядок не гарантируется Да это я чего-то не того спорол, но вышел на свежий воздух и понял:). Тогда вопрос, а как лучше сделать, чтобы можно было удалять данные. До этого делал через vector и сортировал по убыванию индексы. А можно как-то сделать без сортировки? так а чем вектор плох?Название: Re: И снова QTableView Отправлено: Larry от Февраль 05, 2016, 22:49 только тем, что необходимо дополнительно сортировать индексы перед удалением...хотя склоняюсь все же к вектору, если других вариантов нет.
Название: Re: И снова QTableView Отправлено: Larry от Февраль 06, 2016, 11:50 Все таки остановился на векторе. Устраивает всем...только при удалении не по порядку буду сортировать по убыванию - лишняя операция, но нагрузка на сортировку целых чисел не большая, тем более что этих индексов будет...ну максимум до 100, не более.
Название: Re: И снова QTableView Отправлено: gil9red от Февраль 06, 2016, 12:57 только при удалении не по порядку буду сортировать по убыванию - лишняя операция, зачем ему снова сортировать, если у он и так отсортирован? ) Название: Re: И снова QTableView Отправлено: Igors от Февраль 06, 2016, 13:08 Все таки остановился на векторе. Устраивает всем...только при удалении не по порядку буду сортировать по убыванию - лишняя операция, но нагрузка на сортировку целых чисел не большая, тем более что этих индексов будет...ну максимум до 100, не более. Вас трудно понять. m_rows это map? (была). Тогда что такое m_rows.at ? Привели бы описания структур. И зачем "при удалении не по порядку буду сортировать"? После удаления порядок сортировки не нарушается. Название: Re: [РЕШЕНО]И снова QTableView Отправлено: kambala от Февраль 06, 2016, 15:43 отсортировать десяток интов значительное время не займет, я б не заморачивался.
только при удалении не по порядку буду сортировать по убыванию - лишняя операция, зачем ему снова сортировать, если у он и так отсортирован? ) Название: Re: И снова QTableView Отправлено: Larry от Февраль 06, 2016, 17:10 m_rows это уже вектор :). А сортирую, как подтвердили для того, чтобы не схлопотать out of range. Удаляются элементы не по порядку.
|