QListWidget :: addItem () дает мерцание, когда я вызываю его 40 раз в секунду - PullRequest
1 голос
/ 07 декабря 2011

Какой выбор лучше, чем QListWidget, для отображения большого количества строк журнала в графическом интерфейсе, которые поступают из бэкэнда со средней скоростью 40 строк в секунду?

QListWidget дает мерцающее и даже белое поле вместо виджета в течение длительного времени, когда много строк уже помещено в ListWidget.

Есть ли лучшее решение для динамического отображения строк журнала для пользователя?

Обновление:
Изменилась архитектура. Добавление new QStrings в std :: deque . Используя QTimer, я добавляю эти строки каждую 1/10 секунды в QPlainTextEdit, удаляя из deque. boost :: mutex используется для защиты std :: deque (строки журнала поступают из разных потоков).

Было бы неплохо иметь время для реализации моего собственного QListView и хранения строк в больших порциях предварительно выделенной памяти.

Ответы [ 3 ]

2 голосов
/ 07 декабря 2011

Вы уверены, что вам нужны функциональные возможности QListWidget?Если вы просто хотите отобразить строки журнала, я думаю, что более подходящим будет только чтение QPlainTextEdit.

1 голос
/ 07 декабря 2011

Вы можете попытаться использовать QListView, и у вас есть собственная реализация QAbstractItemModel. Затем вы можете хранить свои строки по своему желанию и добавлять новые строки в большие группы (примерно каждая секунда должна быть в порядке). Тогда представление обновляется не при добавлении каждой строки, а только в группах, что должно значительно повысить производительность.

0 голосов
/ 07 декабря 2011

Я бы предложил установить частоту обновления и добавить все собранные элементы сразу. Вы будете избегать перерисовки виджета в каждой добавляемой строке.

Короче говоря: QTimer с частотой обновления (достаточно ~ 1-3 секунд), QListWidget :: addItems вместо QListWidget :: addItem

...