QTextBrowser insertPlainText() вставка большого количества данных не вызывает ОТВЕТА

Я использую insertPlainText() для вставки данных в QTextBrowser в функции слота, но, похоже, это приводит к задержке даже без ответа вместе с увеличением данных. Но когда я добавляю '\n' в конце данных для имитации append(), явление задержки исчезает. Но я не хочу добавлять новую строку, как решить эту проблему?

Я пытался использовать qApp->processEvents() после insertPlainText(), но это привело к сбою.

Я попытался запустить таймер для запуска qApp->processEvents() для обновления пользовательского интерфейса, но это не решило проблему.

Должен ли я начать новый поток для получения данных последовательного порта? Но размер вставляемых данных (я имею в виду полученных данных) невелик, а общий размер данных в браузере большой. Получение данных может не стоить много времени.


person inhowe    schedule 24.03.2020    source источник
comment
Сколько данных вы храните в текстовом браузере и сколько собираетесь вставлять?   -  person vahancho    schedule 24.03.2020
comment
Можете ли вы включить соответствующий код?   -  person William Miller    schedule 25.03.2020


Ответы (1)


insertPlainText() плохо работал на моей машине (i7,16G). Вставка данных займет около 100 мс, когда общая длина данных составляет около 4096 байт. Я попробовал QScintilla виджет с открытым исходным кодом, который лучше, но все же не идеален. Так что я думаю, может быть, это неправильные мысли использовать insertPlainText().

Я изменил свои мысли. Я использую QByteArray для хранения всех данных и использую setText() для отображения последних 4096 байт. Похоже, я делю данные на множество страниц и отображаю последнюю страницу. Этот метод решил проблему хранения большого количества данных. Но есть еще одна небольшая проблема: данные размером 4096 байт не могут заполнить мой экран, когда я разворачиваю свое приложение. Выглядит не очень хорошо, но больше данных приведет к замедлению отклика, поскольку приложение имеет высокую частоту обновления данных.

person inhowe    schedule 03.04.2020