Russian Qt Forum
Сентябрь 30, 2024, 20:17 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Быстрое отображение текстовых данных  (Прочитано 1945 раз)
Mechatronic
Гость
« : Ноябрь 01, 2011, 07:00 »

Здравствуйте!
Существует проблема следующего характера:
Программа обслуживает подключенное по RS-232 (COM-порт) устройство. Кроме всего прочего функционала она обязана выводить в интерфейс пользователя все, что примет из порта(общение идет в ASCII кодах)- что-то вроде minicom в Линуксе. Данные могут сыпаться огромными пакетами на скорости 115200 бит/с.
Сейчас используется компонент QTextBrowser, соединенный с компонентом, обслуживающим порт (находится в отдельном потоке), через слот insertPlainText. Интерфейс "подвисает" при большой плотности входного потока (на некоторых компьютерах сразу, как в QTextBrowser появляется полоса прокрутки). Подскажите, пожалуйста, как выполнить отображение правильно.
Если отрубать от текстового буфера хвост и делать setPlainText()  каждый раз, то не увисает. Это при условии, что хвост помещается в браузер без прокрутки. Но к сожалению,желательно иметь всю историю в визуальном доступе, ну или хотя бы более приличный размер "хвоста" как в том же minicom'e.
Думается, раз всякие minicom'ы не виснут, есть надежда и у нас.
Записан
LisandreL
Птица говорун
*****
Offline Offline

Сообщений: 984


Надо улыбаться


Просмотр профиля
« Ответ #1 : Ноябрь 01, 2011, 19:05 »

Самый банальный - накапливать новые данные в некотором невизуальном буфере (QSring, QByteArray…), а в GUI в слоте updateLog() который будет вызывать сам себя через singleShot (можно и по таймеру).
Ну и разумеется чтение/запись в порт должна быть в отдельном потоке.
Записан
Bepec
Гость
« Ответ #2 : Ноябрь 02, 2011, 06:56 »

Разрабатывал недавно похожую вещь.

LisandreL прав - всего то нужно данные отправлять кусками.
А как - уже твое дело.
Можно и периодично в определенный промежуток, к примеру, раз в полсекунды. Пользователю все же ненужна точность вплоть до 5 миллисекунд Улыбающийся
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.087 секунд. Запросов: 23.