Медленное скрытие строк в QTableView |
Здравствуйте, гость ( Вход | Регистрация )
Медленное скрытие строк в 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 |
Дык поток - это понятно. Только вроде как не советуют в потоке с гуи работать? По крайней мере я стараюсь не трогать гуи в потоке. А что вы в поток посылали? Просто 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 |
Да и кстати когда ты прячешь 20к строк, то каждый раз когда представление перерисовывается, оно пробегается по списку из 20 к элементов и сверяет рисовать ли эту строчку а так же проводит расчеты по сдвигам рисуемых строк, так что идея изначально убога и свидетельствует о кривой архитектуре. Кто ж знал что будет 20к, сначала было всего 50 строк. Теперь то уже буду знать. |
|
|
Текстовая версия | Сейчас: 2.12.2024, 3:04 |