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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: QTableView - медленная сортировка данных  (Прочитано 3790 раз)
joffadark
Гость
« : Апрель 13, 2016, 17:51 »

Здравствуйте, уважаемые форумчане.

Есть самодельная модель, есть QSortFilterProxyModel, есть QTableView.
Количество строк в модели ~ 11 000, столбцов 4.
Если не включать у tableView сортировку, всё летает. Если включить, сортировка занимает примерно 8-10 секунд. После сортировки, что логично, опять все летает.
 
Можно ли как-то ускорить QSortFilterProxyModel?
Записан
PimenS
Крякер
****
Offline Offline

Сообщений: 371


Просмотр профиля
« Ответ #1 : Апрель 13, 2016, 18:19 »

Скорее всего у вас где-то ошибка. Своя модель, QSortFilterProxyModel и QTableView. Строк более 45000, столбцов 7.
Сортировка занимает около 1 сек.
Записан
joffadark
Гость
« Ответ #2 : Апрель 13, 2016, 18:35 »

Скорее всего у вас где-то ошибка. Своя модель, QSortFilterProxyModel и QTableView. Строк более 45000, столбцов 7.
Сортировка занимает около 1 сек.

Где предположительно может быть ошибка?
Единственное, что приходит в голову: при сортировке активно вызывается data из моей модели.  Соответственно, затык где-то в обращении к контейнеру хранения данных в модели (у меня это QList указателей на объекты, у которых берутся данные для различных ролей).
« Последнее редактирование: Апрель 13, 2016, 18:43 от joffadark » Записан
PimenS
Крякер
****
Offline Offline

Сообщений: 371


Просмотр профиля
« Ответ #3 : Апрель 13, 2016, 19:58 »

Сложно без кода гадать.
Записан
lit-uriy
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3880


Просмотр профиля WWW
« Ответ #4 : Апрель 18, 2016, 11:48 »

joffadark используй измерение быстродействия, либо QTestLib-Benchmark
либо по колхозному:
добавь testlib в pro-файл

Далее в исходнике
Код
C++ (Qt)
#include <QtTest/private/cycle_p.h>
 
qDebug() << "====== Start benchmark =======";
CycleCounterTicks t1 = getticks();
// какой-то код
CycleCounterTicks t2 = getticks();
qDebug() << "saveConfig, ticks =" << elapsed(t2, t1);
// ещё какой-то код
CycleCounterTicks t3 = getticks();
qDebug() << "save, ticks =" << elapsed(t3, t2);
Записан

Юра.
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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