2014-02-21 5 views
1

У меня есть источник сообщений. Это постоянно испускает сигналы для сообщений журнала. Эти сообщения журнала должны быть визуализированы каким-то образом в пользовательском интерфейсе. Поскольку в пиковых ситуациях много сообщений (до 100 в секунду), это должно произойти достаточно эффективно.Эффективный способ отображения сообщений журнала в UI

Для этого у меня было 2 подхода:

  1. Используя QTextEdit

    • Это не работал хорошо. Использование insertHtml и позиционирование курсора заняло много времени. Для этого интерфейс начал быть unreponsive
  2. Использование в QTableView с прикрепленным QAbstractTableModel

    • Данные вставляются в модель. Это автоматически обновляет представление. Кроме того, dataChanged -сигнал подключен к QTableView::scrollToBottom, чтобы всегда отображались новые сообщения.

К сожалению, оба подхода не работают достаточно эффективно. Второй вариант лучше, но прокрутка вниз требует много ресурсов.

Может ли кто-нибудь помочь мне с лучшим решением для отображения сообщений журнала?

+1

Я думаю, что вы должны сохранять свои сообщения в очереди, и с помощью таймера вы можете отображать сообщения в пользовательском интерфейсе с последнего раза (если вам нужно 1 сек или меньше) –

ответ

1

Оба QTextEdit и QPlainTextEdit являются довольно медленными и непригодными для чего угодно, кроме самых мелких лесозаготовок. Операции форматирования, которые они выполняют, очень дороги и не предназначены для использования в журналах - на практике быстрый вход в текстовое редактирование завершает работу с графическим интерфейсом.

QTableView, или даже QListView, очень быстр в сравнении. Обратите внимание, что добавленная модель не излучает сигнал dataChanged - поскольку существующие данные не изменяются, и это значение сигнала. Модель излучает сигнал rowsInserted после каждой вставки (среди других сигналов).

Для просмотра списка требуется несколько настроек, чтобы вести себя быстро, см. this answer.

Смежные вопросы