Russian Qt Forum
Ноябрь 22, 2024, 23:41
Добро пожаловать,
Гость
. Пожалуйста,
войдите
или
зарегистрируйтесь
.
Вам не пришло
письмо с кодом активации?
1 час
1 день
1 неделя
1 месяц
Навсегда
Войти
Начало
Форум
WIKI (Вики)
FAQ
Помощь
Поиск
Войти
Регистрация
Russian Qt Forum
>
Forum
>
Qt
>
Пользовательский интерфейс (GUI)
>
QTreeWidget зависает при частой вставке элементов
Страниц: [
1
]
Вниз
« предыдущая тема
следующая тема »
Печать
Автор
Тема: QTreeWidget зависает при частой вставке элементов (Прочитано 2453 раз)
LARSn
Гость
QTreeWidget зависает при частой вставке элементов
«
:
Сентябрь 16, 2013, 17:59 »
Здрасти))
Я новичок, так что сильно не пинайте)
Задача: в виджет состоящий из нескольких колонок необходимо добавлять строчки из другого потока. При этом частота добавления строк может быть оч большой (в другом потоке перехватываются пакеты, а виджете отображается инфа о пакете).
Проблема 1: при большой загруженности сетевой карты, т.е. при частом добавлении item'ом в QtreeWidget происходит зависание qtreeWidget намертво! (добавляю через addTopLevelItem).
Проблема 2: при длительной работе приложения постоянно растет объем потребляемой памяти (это как я понял связанно с тем что каждый item должен создаваться через new).
Посоветуйте как избавится от зависаний и растущего аппетита приложения???
Погуглил, и понял что вариантов несколько: 1) создавать свою модель данных 2) В теории можно переопределить событие перерисовки виджета и каким-то образом прорисовывать его не чаще чем раз в полсекунды или прорисовывать только когда скопится N новых item'ов (но только как это реализовать???) 3) Может я изначально не туда смотрю? может использовать не qtreewidget как элемент отображения пакетов??
P.s. в плане реализации потоков и их работы - там ошибок не может быть, т.к. все отлично работало C++Builder(Embrcadero)
Записан
voral
Гость
Re: QTreeWidget зависает при частой вставке элементов
«
Ответ #1 :
Сентябрь 16, 2013, 18:39 »
естественно объем занятой памяти будет расти - надо ж где то все это хранить.
Как вариант: Пишите в БД, а GUI через определенный интервал времени пусть запрашивает N последних записей (и оп ситуации либо отображаете только эти посление n записей либо дописывате эти N уже загруженным). Если человек захочет прокрутить -тогда подгружаете сколько надо.
Опять же зависит от того что за задача. Может есть возможность отфильтровать пакеты и отображать не все. Я в свое время делал при достижении определенного числа запсией поступаем следующим образом: при каждом добавлении строки - одну (самую старую удаляем). Естественно в БД, у меня тогда текстовый файл, храниться все.
Записан
mutineer
Гость
Re: QTreeWidget зависает при частой вставке элементов
«
Ответ #2 :
Сентябрь 17, 2013, 10:03 »
Переделай все на Model/View, в модель данные добавляй с любой нужной частотой, но вот оповещение о том, что в модели появились новые данные высылай с каким-нить интервалом. Например каждый 200мс
Или можешь в принимающем модуле собирать пакеты, а потом пачкой отправлять в модель, а не по одному
Память естественно растет - ты же все больше данных хранишь
Записан
Страниц: [
1
]
Вверх
Печать
« предыдущая тема
следующая тема »
Перейти в:
Пожалуйста, выберите назначение:
-----------------------------
Qt
-----------------------------
=> Вопросы новичков
=> Уроки и статьи
=> Установка, сборка, отладка, тестирование
=> Общие вопросы
=> Пользовательский интерфейс (GUI)
=> Qt Quick
=> Model-View (MV)
=> Базы данных
=> Работа с сетью
=> Многопоточное программирование, процессы
=> Мультимедиа
=> 2D и 3D графика
=> OpenGL
=> Печать
=> Интернационализация, локализация
=> QSS
=> XML
=> Qt Script, QtWebKit
=> ActiveX
=> Qt Embedded
=> Дополнительные компоненты
=> Кладовая готовых решений
=> Вклад сообщества в Qt
=> Qt-инструментарий
-----------------------------
Программирование
-----------------------------
=> Общий
=> С/C++
=> Python
=> Алгоритмы
=> Базы данных
=> Разработка игр
-----------------------------
Компиляторы и платформы
-----------------------------
=> Linux
=> Windows
=> Mac OS X
=> Компиляторы
===> Visual C++
-----------------------------
Разное
-----------------------------
=> Новости
===> Новости Qt сообщества
===> Новости IT сферы
=> Говорилка
=> Юмор
=> Объявления
Загружается...