crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

2 страниц V   1 2 >  
Ответить в данную темуНачать новую тему
> Медленное скрытие строк в QTableView
RazrFalcon
  опции профиля:
сообщение 29.3.2012, 0:09
Сообщение #1


Zombie Mod
*****

Группа: Участник
Сообщений: 1654
Регистрация: 24.5.2010
Из: Харьков
Пользователь №: 1752

Спасибо сказали: 64 раз(а)




Репутация:   212  


20000 раз сделать hideRow(i); и моя прога повисает на секунд 15.
Как можно ускорить скрытие строк, ну или изменить. Так как мне нужно отображать только несколько строк из модели, но вся модель находится в tableview
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
sidsukana
  опции профиля:
сообщение 29.3.2012, 6:00
Сообщение #2


Участник
**

Группа: Участник
Сообщений: 158
Регистрация: 23.12.2010
Из: Челябинск
Пользователь №: 2296

Спасибо сказали: 10 раз(а)




Репутация:   2  


У меня даже больше строк надо было скрыть. В поток этот цикл, ну и прогрессбар чтобы визуализировать процесс работы.
Буквально секунд 5 он прогоняет может чуть больше. Хотя может есть что-то получше, я бы тоже не отказался.

Сообщение отредактировал sidsukana - 29.3.2012, 6:01
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
RazrFalcon
  опции профиля:
сообщение 29.3.2012, 8:27
Сообщение #3


Zombie Mod
*****

Группа: Участник
Сообщений: 1654
Регистрация: 24.5.2010
Из: Харьков
Пользователь №: 1752

Спасибо сказали: 64 раз(а)




Репутация:   212  


Дык поток - это понятно.
Только вроде как не советуют в потоке с гуи работать? По крайней мере я стараюсь не трогать гуи в потоке.

А что вы в поток посылали? Просто tableview?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
DOGG
  опции профиля:
сообщение 29.3.2012, 9:44
Сообщение #4


Студент
*

Группа: Участник
Сообщений: 44
Регистрация: 9.8.2011
Из: Калининград
Пользователь №: 2798

Спасибо сказали: 6 раз(а)




Репутация:   0  


Если модель SQL, то можно использовать setFilter(QString)...
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
sidsukana
  опции профиля:
сообщение 29.3.2012, 11:30
Сообщение #5


Участник
**

Группа: Участник
Сообщений: 158
Регистрация: 23.12.2010
Из: Челябинск
Пользователь №: 2296

Спасибо сказали: 10 раз(а)




Репутация:   2  


Цитата(RazrFalcon @ 29.3.2012, 10:27) *
Дык поток - это понятно.
Только вроде как не советуют в потоке с гуи работать? По крайней мере я стараюсь не трогать гуи в потоке.

А что вы в поток посылали? Просто tableview?


В потоке цикл - в цикле проверка модели на нужное поле. Каждый цикл отправка евента на гуи с булевой переменной (ну и номер строки)
С работы приду, посмотрю точней как я делал.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
RazrFalcon
  опции профиля:
сообщение 29.3.2012, 12:25
Сообщение #6


Zombie Mod
*****

Группа: Участник
Сообщений: 1654
Регистрация: 24.5.2010
Из: Харьков
Пользователь №: 1752

Спасибо сказали: 64 раз(а)




Репутация:   212  


У меня сама проверка занял 5мс. А вот именно hideRow долгий. Почти 20сек.

Пока что вынес в поток через QtConcurrent - не зависает, но коряво отображается (видно как они исчезаеют).

Цитата
Если модель SQL, то можно использовать setFilter(QString)...

QStandartItemModel
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
sidsukana
  опции профиля:
сообщение 29.3.2012, 12:45
Сообщение #7


Участник
**

Группа: Участник
Сообщений: 158
Регистрация: 23.12.2010
Из: Челябинск
Пользователь №: 2296

Спасибо сказали: 10 раз(а)




Репутация:   2  


Standard он же тяжелый до задницы, я как-то тут уже спрашивал как оптимизировать. Сделал на абстрактной модели и все залетало.
Ну у меня формирование на абстрактной модели, там всего 2 поля. Ну и около 50к строк. Формирование происходит меньше чем за секунду.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
RazrFalcon
  опции профиля:
сообщение 29.3.2012, 14:30
Сообщение #8


Zombie Mod
*****

Группа: Участник
Сообщений: 1654
Регистрация: 24.5.2010
Из: Харьков
Пользователь №: 1752

Спасибо сказали: 64 раз(а)




Репутация:   212  


C QAbstractTableModel так же медленно скрывает строки.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Гость_Гость_*
сообщение 29.3.2012, 15:01
Сообщение #9





Гости








    


Скрывает быстро, рисует медленно, как вариант, кэшируй где нибудь скрываемые строки, а лучше их индексы (QPersistentIndex только лучше использовать), а затем прячь все разом, что бы отрисовка была только одна.
Реализовать это можно например с помощью прокси модели, которая отдает все строчки кроме списка тех которые ты попросил неотдавать, может быть ещё прокатит спрятать представление, спрятать все строки, показать представление, по идее для невидимого представления время на перерисовку не будет тратится при скрытии строчек.
Да и кстати когда ты прячешь 20к строк, то каждый раз когда представление перерисовывается, оно пробегается по списку из 20 к элементов и сверяет рисовать ли эту строчку а так же проводит расчеты по сдвигам рисуемых строк, так что идея изначально убога и свидетельствует о кривой архитектуре.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
RazrFalcon
  опции профиля:
сообщение 29.3.2012, 15:36
Сообщение #10


Zombie Mod
*****

Группа: Участник
Сообщений: 1654
Регистрация: 24.5.2010
Из: Харьков
Пользователь №: 1752

Спасибо сказали: 64 раз(а)




Репутация:   212  


Цитата(Гость @ 29.3.2012, 15:01) *
Да и кстати когда ты прячешь 20к строк, то каждый раз когда представление перерисовывается, оно пробегается по списку из 20 к элементов и сверяет рисовать ли эту строчку а так же проводит расчеты по сдвигам рисуемых строк, так что идея изначально убога и свидетельствует о кривой архитектуре.

Кто ж знал что будет 20к, сначала было всего 50 строк. Теперь то уже буду знать.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

2 страниц V   1 2 >
Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


4 чел. читают эту тему (гостей: 4, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 30.11.2024, 0:55