Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: Igors от Сентябрь 23, 2020, 17:50



Название: Тормоза selectItem [решено]
Отправлено: Igors от Сентябрь 23, 2020, 17:50
Добрый день

7К айтемов (не так уж много), выборка "вразнобой" (по заданному ключу) замерзает примерно на 7-8 секунд. Профайл показывает: (аттач). Ну merge 30% - то явно обосрались с контейнерами. А вот 40% emitSelectionСhanged я смотрел - там сравнивается старое и новое selection и разница эмиттиться в selectionChanged. И это делается для каждого вызова selectItem, хотя это совсем не нужно, сигналы я откючил (blockSignals).

Как подсунуть ему диапазны selection самому?

Спвсибо


Название: Re: Тормоза selectItem
Отправлено: Racheengel от Сентябрь 24, 2020, 12:37
А так если еще:

  setUpdatesEnabled(false);
  ...
  setUpdatesEnabled(true);


Название: Re: Тормоза selectItem
Отправлено: Igors от Сентябрь 24, 2020, 12:58
А так если еще:

  setUpdatesEnabled(false);
  ...
  setUpdatesEnabled(true);
Не спасает т.к. с рисованием задержка не связана.

Ну, как всегда, в роли "живого хелпа" форум неэффективен :) Хотя UI занимаются все-все-все. Ну это нормально. А по теме: да, многократный вызов selectItem тормозит и при "массивных" выборках надо юзать selection напрямую, псевдокод
Код
C++ (Qt)
QItemSelection dst;
dst.reserve(src.size();
auto * model = tree->selectionModel()->model();
 
for (int i = 0; i < src.size(); ++i) {
if (!NeedSelect(&src[i])) continue;
dst.push_back(QItemSelectionRange(model->index(i, 0), model->index(i, numCol - 1)));
}
 
tree->selectionModel()->select(dst, QItemSelectionModel::Select);
 
Имеем 0.25 сек в дебаге