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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: QSortFilterProxyModel + QStandardItemModel + QTreeView + crush when remove rows  (Прочитано 4219 раз)
vintik
Гость
« : Январь 24, 2013, 18:43 »

Всем привет!

Очень нуждаюсь в помощи сообщества!
Есть проблема при работе с моделью.

Исходные условия: есть QTreeView и 2 модели - стандартная и прокси.
Стандартная модель имеет несколько уровней вложенности.
Во вьюхе перманентно установлена прокси модель.

Проблема возникает в следующем случае. Сперва заполняется  стандартная модель. Затем устанавливаются условия фильтрации.
После этого из стандартной модели удаляются определённые айтемы. На этапе удаления прога крашится.
Ниже кусок кода.
Код:
    foreach(QStandardItem *item, list_item_)
    {
        QStandardItem *parent = item->parent();
        parent->removeRow(item->row());  // crush
    }

Причина мне абсолютно не понятна. Сломал голову, мозг, мышку, клавиатуру... всё сломал, но почему валится не понимаю

Сижу под Kubuntu 12.10 (64). Использую нативную для системы версию Qt 4.8.3

По ссылке можно качнуть пример проекта http://yadi.sk/d/uZk-Kfc025UUP. Если собрать в дебаге и запустить, свалится аккурат в указанном месте
Записан
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4349



Просмотр профиля
« Ответ #1 : Январь 24, 2013, 20:14 »

Я правильно понимаю, что ты пытаешься удалить текущий элемент, на который указывает итератор?
Записан
vintik
Гость
« Ответ #2 : Январь 24, 2013, 21:57 »

Да, всё верно! В списке хранятся валидные указатели на айтемы 2го уровня(сразу после верхнего). Их я и удаляю из дерева. После удаления указатели нет смысла хранить.. но тут я список не очищаю, поскольку пример искусственный.
Записан
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4349



Просмотр профиля
« Ответ #3 : Январь 24, 2013, 23:32 »

А у меня твой тестовый пример не падает.

Цитировать
QMake version 2.01a
Using Qt version 4.8.4 in /usr/lib
Записан
vintik
Гость
« Ответ #4 : Январь 25, 2013, 00:15 »

А у меня твой тестовый пример не падает.

Цитировать
QMake version 2.01a
Using Qt version 4.8.4 in /usr/lib

Это чертовски хорошая новость! Может это была кутешная бага и её пофиксили...
Записан
vintik
Гость
« Ответ #5 : Январь 25, 2013, 01:49 »

Дома сижу под арчем, вот только что обновил версию Qt до 4.8.4 - пример в приложенном к теме архиве заработал!
Видимо всё-таки кутешный баг был...
Кстати, до обновления версия была 4.8.2 - прога валилась в том же месте, что и при сборке с 4.8.3

Но если кто-нибудь всё-таки не поленится и найдёт в коде, где я был не прав (и был ли я неправ), то буду бесконечно благодарен
« Последнее редактирование: Январь 25, 2013, 01:51 от vintik » Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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