Russian Qt Forum

Qt => Model-View (MV) => Тема начата: UVV от Ноябрь 18, 2010, 21:56



Название: Вызвать beginInsertRows() после добавления данных
Отправлено: 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 до того, пока данные не добавятся.
Будет ли это иметь какие-либо негативные последствия?


Название: Re: Вызвать beginInsertRows() после добавления данных
Отправлено: Пантер от Ноябрь 18, 2010, 22:02
Проверь. ;) По идее, при добавлении проблем быть не должно. Вот при удалении...


Название: Re: Вызвать beginInsertRows() после добавления данных
Отправлено: UVV от Ноябрь 18, 2010, 22:18
Проверь. ;) По идее, при добавлении проблем быть не должно. Вот при удалении...
Да я написал уже вчера, всё работает нормально.
Просто хотел проверить, может кто-нибудь с чем-нибудь сталкивался...


Название: Re: Вызвать beginInsertRows() после добавления данных
Отправлено: Авварон от Ноябрь 18, 2010, 22:25
Ну у меня тоже работало, но это исключительно потому что поток 1 и такая реализация. Основной функционал в endInsert*() - там кидается сигнал вьюхе. Лучше не рисковать, поломаетесь на ровном месте. Пока я видел только 1 случай, когда так приходилось делать, но это пофиксили в 4.6 (beginMove*())


Название: Re: Вызвать beginInsertRows() после добавления данных
Отправлено: UVV от Ноябрь 18, 2010, 22:44
Ну у меня тоже работало, но это исключительно потому что поток 1 и такая реализация. Основной функционал в endInsert*() - там кидается сигнал вьюхе. Лучше не рисковать, поломаетесь на ровном месте. Пока я видел только 1 случай, когда так приходилось делать, но это пофиксили в 4.6 (beginMove*())
Т.е. я правильно понял, что лучше написать препроцессинговые функции, чтобы заранее узнать count?


Название: Re: Вызвать beginInsertRows() после добавления данных
Отправлено: asvil от Ноябрь 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.


Название: Re: Вызвать beginInsertRows() после добавления данных
Отправлено: Barmaglodd от Ноябрь 19, 2010, 08:00
А вот я допустим из базы данные тяну и, пока конец не поймаю, не знаю сколько их там, как быть? Хотя тут можно в промежуточный буфер запихать, а потом модель изменять.