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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: 4.2.2 TableView - изменение кол-ва строк  (Прочитано 6114 раз)
Alexandr_Sky
Гость
« : Май 13, 2007, 14:39 »

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

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

Сообщений: 2679


Я работал с дискетам 5.25 :(


Просмотр профиля
« Ответ #1 : Май 13, 2007, 14:51 »

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

What is the 11 in the C++11? It’s the number of feet they glued to C++ trying to obtain a better octopus.

COVID не волк, в лес не уйдёт
Alexandr_Sky
Гость
« Ответ #2 : Май 13, 2007, 16:25 »

Racheengel
Дело в том, что у меня есть своя структура данных. Модель определенным образом их отдает таблице. Когда я что-то меняю в данных, необходимо как-то сообщить об этом.

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

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

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

Сообщений: 2679


Я работал с дискетам 5.25 :(


Просмотр профиля
« Ответ #3 : Май 13, 2007, 23:27 »

4.2.3 есть возможность попробовать?
Записан

What is the 11 in the C++11? It’s the number of feet they glued to C++ trying to obtain a better octopus.

COVID не волк, в лес не уйдёт
Alexandr_Sky
Гость
« Ответ #4 : Май 16, 2007, 09:19 »

Пока нет, накладно качать.

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

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

выполняется в цикле. Но вынести за пределы цикла не получается - строки могут удалятся не обязательно подряд.
Что можно тут сделать?
Записан
Racheengel
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2679


Я работал с дискетам 5.25 :(


Просмотр профиля
« Ответ #5 : Май 16, 2007, 11:45 »

может попробовать blockSignals() ?
Записан

What is the 11 in the C++11? It’s the number of feet they glued to C++ trying to obtain a better octopus.

COVID не волк, в лес не уйдёт
Alexandr_Sky
Гость
« Ответ #6 : Май 16, 2007, 14:01 »

Спасибо, попробую.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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