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

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

Страниц: 1 [2]   Вниз
  Печать  
Автор Тема: QAbstractItemModel::beginInsertRows и вставка неизвестно чего неизвестно куда.  (Прочитано 26589 раз)
drsm
Гость
« Ответ #15 : Май 05, 2009, 03:20 »

статью не читал еще  Смеющийся, хочу отметить, по поводу "неизвестно куда".
при наличии сложной семантики добавления/удаления элементов,
проще перещитать самому persistentIndexList у модели и заэмитить нужные сигналы,
где-то тут я уже об этом подробнее писал.
Записан
Eugene Efremov
Гость
« Ответ #16 : Май 11, 2009, 19:10 »

статью не читал еще 

Как выяснилось, способ, который я применил в статье, не работает. Точнее — в моем примере работает, но в более сложных случаях будет глючить... Так что — вопрос остается открытым...

при наличии сложной семантики добавления/удаления элементов,
проще перещитать самому persistentIndexList у модели и заэмитить нужные сигналы,
где-то тут я уже об этом подробнее писал.

Ммм... Имеется в виду, как я понимаю, вот это:

если невозможно использовать эти функции то алгоритм такой:
1. emit layoutAboutToBeChanged();
2. сохранить данные по индексам из persistentIndexList()
3. добавить/удалить элементы
4. пересчитать индексы в persistentIndexList() используя данные из 2. см changePersistentIndex()
5. emit layoutChanged();

Проблема в том, что там еще где-то вызывается сигнал rowsInserted, про который сказано, что юзер его вызывать не должен, а токмо через begin/endInsertRows...
Записан
ритт
Гость
« Ответ #17 : Май 11, 2009, 22:33 »

юзер его вызывать _не_может_ (соответственно, и не должен)
посмотри код begin/endInsertRows - там всё как бы просто, но не сделай этого - модель работать не будет (или будет, но через ж)...вот и упростили
Записан
Eugene Efremov
Гость
« Ответ #18 : Май 13, 2009, 18:11 »

юзер его вызывать _не_может_ (соответственно, и не должен)

(посмотрев код) Во как... private signals — не знал, что такое вообще возможно...

посмотри код begin/endInsertRows - там всё как бы просто, но не сделай этого - модель работать не будет (или будет, но через ж)...вот и упростили

И того, получается, что вся эта чехарда с beginInsertRows нужна для двух вещей:
  • вызвать rows(AboutToBe)Inserted;
  • пересчитать persistent indexes;

Так? Или там еще что-то делается?
Записан
Страниц: 1 [2]   Вверх
  Печать  
 
Перейти в:  


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