C++ Qt Производительность QScrollArea с большим количеством элементовC++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 C++ Qt Производительность QScrollArea с большим количеством элементов

Сообщение Anonymous »

В приложении, которое я создаю в Windows с библиотеками C++ и Qt, у меня возникают огромные проблемы с производительностью памяти из-за добавления такого большого количества элементов в прокручиваемую область. Это всего лишь QFrames, объекты макета, объекты-разделители и QLabels. QFrames используются только потому, что я выбрал именно такой способ создания цветного фона. Но на скриншоте показана типичная «строка» (с затемненными личными текстовыми данными), а у меня таких «строчек» около 500-600, на загрузку которых уходит около 1,8 ГБ ОЗУ!!! Загрузка занимает целую вечность, и прокрутка становится очень плохой, если размер окна изменяется или если я выхожу из приложения и возвращаюсь к нему. Если я ограничу загрузку примерно 30 строками, приложение станет полностью отзывчивым и быстрым. Итак, я думаю, мне нужно сделать что-то динамичное, например создать пул объектов и удалить их, когда они находятся вне поля зрения, или переназначить их для тех линий, которые находятся в поле зрения. Я немного не понимаю, как это сделать и является ли это правильным решением. Я попытался подключиться к сигналу «valueChanged(int)» QScrollBar, чтобы перерисовать его, но это замедляет работу и возвращает ползунок обратно в верхнее положение, это полный беспорядок, даже когда я рисую только 15 математически обоснованных линий. в положении прокрутки. Какие-либо предложения? Мне это не кажется чем-то отличным от большого файла электронной таблицы, и Microsoft Excel, кажется, отлично справляется с прокруткой больших наборов данных.
Изображение


Подробнее здесь: https://stackoverflow.com/questions/785 ... r-of-items
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»