Название: QTreeWidget зависает при частой вставке элементов Отправлено: LARSn от Сентябрь 16, 2013, 17:59 Здрасти))
Я новичок, так что сильно не пинайте) Задача: в виджет состоящий из нескольких колонок необходимо добавлять строчки из другого потока. При этом частота добавления строк может быть оч большой (в другом потоке перехватываются пакеты, а виджете отображается инфа о пакете). Проблема 1: при большой загруженности сетевой карты, т.е. при частом добавлении item'ом в QtreeWidget происходит зависание qtreeWidget намертво! (добавляю через addTopLevelItem). Проблема 2: при длительной работе приложения постоянно растет объем потребляемой памяти (это как я понял связанно с тем что каждый item должен создаваться через new). Посоветуйте как избавится от зависаний и растущего аппетита приложения??? Погуглил, и понял что вариантов несколько: 1) создавать свою модель данных 2) В теории можно переопределить событие перерисовки виджета и каким-то образом прорисовывать его не чаще чем раз в полсекунды или прорисовывать только когда скопится N новых item'ов (но только как это реализовать???) 3) Может я изначально не туда смотрю? может использовать не qtreewidget как элемент отображения пакетов?? P.s. в плане реализации потоков и их работы - там ошибок не может быть, т.к. все отлично работало C++Builder(Embrcadero) Название: Re: QTreeWidget зависает при частой вставке элементов Отправлено: voral от Сентябрь 16, 2013, 18:39 естественно объем занятой памяти будет расти - надо ж где то все это хранить.
Как вариант: Пишите в БД, а GUI через определенный интервал времени пусть запрашивает N последних записей (и оп ситуации либо отображаете только эти посление n записей либо дописывате эти N уже загруженным). Если человек захочет прокрутить -тогда подгружаете сколько надо. Опять же зависит от того что за задача. Может есть возможность отфильтровать пакеты и отображать не все. Я в свое время делал при достижении определенного числа запсией поступаем следующим образом: при каждом добавлении строки - одну (самую старую удаляем). Естественно в БД, у меня тогда текстовый файл, храниться все. Название: Re: QTreeWidget зависает при частой вставке элементов Отправлено: mutineer от Сентябрь 17, 2013, 10:03 Переделай все на Model/View, в модель данные добавляй с любой нужной частотой, но вот оповещение о том, что в модели появились новые данные высылай с каким-нить интервалом. Например каждый 200мс
Или можешь в принимающем модуле собирать пакеты, а потом пачкой отправлять в модель, а не по одному Память естественно растет - ты же все больше данных хранишь |