Russian Qt Forum

Qt => Model-View (MV) => Тема начата: Alexandr_Sky от Май 13, 2007, 14:39



Название: 4.2.2 TableView - изменение кол-ва строк
Отправлено: Alexandr_Sky от Май 13, 2007, 14:39
Здравствуйте!
Столкнулся со следующей проблемой:
Работаю с TableView. Когда в данных меняется количество строк, то под Linux я просто выполняю в таблице reset(), но в винде это не прокатывает - количество строк остается таким же. Решил это, заново устанавливая модель
Код:
myTable->setModel(myTable->model());

каждый раз, когда количество строк изменяется, но ИМХО, решение кривое.
Может кто знает, как правильно сообщить таблице, что изменились данные, учитывая возможность изменения количества строк?


Название: 4.2.2 TableView - изменение кол-ва строк
Отправлено: Racheengel от Май 13, 2007, 14:51
хм... по идее, тебе вообще ничего не надо делать с таблицей в этом случае - view сам обязан реагировать на смену данных в модели. ИМХО косяк. 4.2.2 вообще глючноватая какая-то.


Название: 4.2.2 TableView - изменение кол-ва строк
Отправлено: Alexandr_Sky от Май 13, 2007, 16:25
Racheengel
Дело в том, что у меня есть своя структура данных. Модель определенным образом их отдает таблице. Когда я что-то меняю в данных, необходимо как-то сообщить об этом.

добавлено спустя 1 час 15 минут:

 Так, кажется понял. Надо было в функции добавления строк сделать
Код:
beginInsertRows(QModelIndex(), beginPos, endPos);
...
endInsertRows();

, а между ними делать свою вставку строк. По идее, после endInsertRows() будет посылаться сигнал rowsInserted(), который и заставит TableView правильно перерисоваться.
Завтра на работе проверю. :)


Название: 4.2.2 TableView - изменение кол-ва строк
Отправлено: Racheengel от Май 13, 2007, 23:27
4.2.3 есть возможность попробовать?


Название: 4.2.2 TableView - изменение кол-ва строк
Отправлено: Alexandr_Sky от Май 16, 2007, 09:19
Пока нет, накладно качать.

добавлено спустя 27 минут:

 Да, все правильно - так заработало.
Но появилась другая проблема. При удалении большого (даже не большого ~ 1000) количества точек сильно тормозит. Дело в том, что
Код:
beginRemoveRows(QModelIndex(), first, last); 
...
endRemoveRows();

выполняется в цикле. Но вынести за пределы цикла не получается - строки могут удалятся не обязательно подряд.
Что можно тут сделать?


Название: 4.2.2 TableView - изменение кол-ва строк
Отправлено: Racheengel от Май 16, 2007, 11:45
может попробовать blockSignals() ?


Название: 4.2.2 TableView - изменение кол-ва строк
Отправлено: Alexandr_Sky от Май 16, 2007, 14:01
Спасибо, попробую.