Russian Qt Forum

Qt => Model-View (MV) => Тема начата: joffadark от Апрель 13, 2016, 17:51



Название: QTableView - медленная сортировка данных
Отправлено: joffadark от Апрель 13, 2016, 17:51
Здравствуйте, уважаемые форумчане.

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


Название: Re: QTableView - медленная сортировка данных
Отправлено: PimenS от Апрель 13, 2016, 18:19
Скорее всего у вас где-то ошибка. Своя модель, QSortFilterProxyModel и QTableView. Строк более 45000, столбцов 7.
Сортировка занимает около 1 сек.


Название: Re: QTableView - медленная сортировка данных
Отправлено: joffadark от Апрель 13, 2016, 18:35
Скорее всего у вас где-то ошибка. Своя модель, QSortFilterProxyModel и QTableView. Строк более 45000, столбцов 7.
Сортировка занимает около 1 сек.

Где предположительно может быть ошибка?
Единственное, что приходит в голову: при сортировке активно вызывается data из моей модели.  Соответственно, затык где-то в обращении к контейнеру хранения данных в модели (у меня это QList указателей на объекты, у которых берутся данные для различных ролей).


Название: Re: QTableView - медленная сортировка данных
Отправлено: PimenS от Апрель 13, 2016, 19:58
Сложно без кода гадать.


Название: Re: QTableView - медленная сортировка данных
Отправлено: lit-uriy от Апрель 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);