Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Быстрое отображение текстовых данных, Отображение потока данных из COM-порта 
:(
    Опции темы
Mechatronic
Дата 31.10.2011, 10:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 73
Регистрация: 28.3.2010

Репутация: нет
Всего: нет



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

Спасибо за внимание.
PM MAIL   Вверх
_GRIN_
Дата 31.10.2011, 12:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


одинокий падаван
**


Профиль
Группа: Участник
Сообщений: 272
Регистрация: 18.11.2007
Где: Калуга

Репутация: 6
Всего: 7



Mechatronic, попробуй не напрямую к слоту insertPlainText привязаться, а сделай свой слот следующим образом:
Код

void MyClass::insertText(QString plainText) {
    textBrowser->setUpdatesEnabled(false);
    textBrowser->insertPlainText(plainText);
    textBrowser->setUpdatesEnabled(true);
}


Детальнее тут: http://doc.qt.nokia.com/stable/qwidget.htm...tesEnabled-prop


--------------------
Дорогу осилит идущий
PM MAIL Skype   Вверх
Mechatronic
Дата 1.11.2011, 06:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 73
Регистрация: 28.3.2010

Репутация: нет
Всего: нет



Спасибо за попытку, но не спасло, к сожалению. На пару секунд дольше держится теперь интерфейс и все равно виснет. Если отрубать от текстового буфера хвост и делать setPlainText()  каждый раз, то не увисает. Это при условии, что хвост помещается в браузер без прокрутки. Но к сожалению,желательно иметь всю историю в визуальном доступе, ну или хотя бы более приличный размер "хвоста" как в том же minicom'e.
Может другие варианты есть?

Это сообщение отредактировал(а) Mechatronic - 1.11.2011, 06:54
PM MAIL   Вверх
math64
Дата 1.11.2011, 07:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2505
Регистрация: 12.4.2007

Репутация: 23
Всего: 72



Редактировать надо? Если нет, можно попробовать использовать список (с разделением модель-вид)
При использовании редактора добавлять текст, когда наберётся целая строка (набираемая строка выводится в отдельном виджете внизу от редактора)
PM   Вверх
Mechatronic
Дата 1.11.2011, 07:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 73
Регистрация: 28.3.2010

Репутация: нет
Всего: нет



Список? QListView имеете ввиду? Есть основания полагать, что он отобразит быстрее?
Редактировать полученный текст не надо, в главном потоке его нужно только отображать, дополнять по мере прихода новых символов из порта.

Это сообщение отредактировал(а) Mechatronic - 1.11.2011, 08:10
PM MAIL   Вверх
borisbn
Дата 1.11.2011, 08:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: 48
Всего: 135



Цитата(Mechatronic @  1.11.2011,  07:55 Найти цитируемый пост)
Есть основания полагать, что он отобразит быстрее?

есть, т.к. он отображает только то, что в данный момент находится на экране.
и ещё: если ты говоришь, что тормозить начинает при прокрутке, то м.б. у тебя не установлены драйвера на видео ?
ааа... ещё: чтобы ограничить кол-во строк в QTextEdit'е сделай
Код

textEdit->document()->setMaximumBlockCount( макс_кол-во_строк );



--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
_GRIN_
Дата 1.11.2011, 11:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


одинокий падаван
**


Профиль
Группа: Участник
Сообщений: 272
Регистрация: 18.11.2007
Где: Калуга

Репутация: 6
Всего: 7



Я тоже считаю что QListView (c убранной решёткой и отключенным редактированием) + QStandartItemModel - идеальный выход в данной ситуации - быстро (по производительности) и кода писать минимум =)


--------------------
Дорогу осилит идущий
PM MAIL Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С/С++: Кроссплатформенное программирование, QT/Gtk+/wxWidgets"
JackYF
Любитель
  • В заголовке темы в квадратных скобках обозначьте используемую вами библиотеку, например: [QT],[GTK],[wx].
  • Если вопрос актуален только для некоторой версии библиотеки, либо, если вы пользуетесь не самой последней версией, укажите это. Например: [QT4], [GTK2].
  • Все начинающие изучать Qt - не забудьте зайти сюда.
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • В вопросе укажите полную версию версию библиотеки, а также все дополнительные используемые программные пакеты.
  • Не забывайте пользоваться кнопкой "Код".
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к тематике этого раздела. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, Любитель.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets | Следующая тема »


 




[ Время генерации скрипта: 0.0939 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.