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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Вызвать beginInsertRows() после добавления данных  (Прочитано 4110 раз)
UVV
Гость
« : Ноябрь 18, 2010, 21:56 »

Привет.
Документация говорит:
Цитировать
...you must call this function before inserting data into the model's underlying data store
Я сначала добавляю данные, а потом уже делаю
Код:
beginInsertRows(parent, row, row + count - 1);
endInsertRows();
потому что я не знаю count до того, пока данные не добавятся.
Будет ли это иметь какие-либо негативные последствия?
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #1 : Ноябрь 18, 2010, 22:02 »

Проверь. Подмигивающий По идее, при добавлении проблем быть не должно. Вот при удалении...
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
UVV
Гость
« Ответ #2 : Ноябрь 18, 2010, 22:18 »

Проверь. Подмигивающий По идее, при добавлении проблем быть не должно. Вот при удалении...
Да я написал уже вчера, всё работает нормально.
Просто хотел проверить, может кто-нибудь с чем-нибудь сталкивался...
Записан
Авварон
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3260


Просмотр профиля
« Ответ #3 : Ноябрь 18, 2010, 22:25 »

Ну у меня тоже работало, но это исключительно потому что поток 1 и такая реализация. Основной функционал в endInsert*() - там кидается сигнал вьюхе. Лучше не рисковать, поломаетесь на ровном месте. Пока я видел только 1 случай, когда так приходилось делать, но это пофиксили в 4.6 (beginMove*())
Записан
UVV
Гость
« Ответ #4 : Ноябрь 18, 2010, 22:44 »

Ну у меня тоже работало, но это исключительно потому что поток 1 и такая реализация. Основной функционал в endInsert*() - там кидается сигнал вьюхе. Лучше не рисковать, поломаетесь на ровном месте. Пока я видел только 1 случай, когда так приходилось делать, но это пофиксили в 4.6 (beginMove*())
Т.е. я правильно понял, что лучше написать препроцессинговые функции, чтобы заранее узнать count?
Записан
asvil
Гость
« Ответ #5 : Ноябрь 18, 2010, 22:56 »

Ну если у Вас связанный список
Код:
struct item{
datatype array[];
item* previous;
item* next;
}items
, то в функции заполнения можно сначала создать эту новую часть списка, на этом этапе станет известен count. А потом уже оповещать и перевязывать:
Код:
item *insterting;
fill(inserting);
beginInsertRows(parent, row, row + count - 1);
items[row]->next = inserting[0];
inserting[0]->previous = items[row];
items[row+count -1]->previous = inserting[count];
inserting[count]->next = items[row+count -1];
endInsertRows();
Возможно я где-то ошибся в +-1.
Записан
Barmaglodd
Гость
« Ответ #6 : Ноябрь 19, 2010, 08:00 »

А вот я допустим из базы данные тяну и, пока конец не поймаю, не знаю сколько их там, как быть? Хотя тут можно в промежуточный буфер запихать, а потом модель изменять.
« Последнее редактирование: Ноябрь 19, 2010, 08:11 от Barmaglodd » Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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