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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: как избавиться от буферизации при добавлении в QTextEdit?  (Прочитано 6968 раз)
Гурман
Гуру общения
******
Offline Offline

Сообщений: 1442

Qt 2.2, 3.3, 4.5, 4,7, 4.8, 5.3, 5.6, 5.9, 5.12


Просмотр профиля
« : Февраль 18, 2010, 10:27 »

есть объект этого класса, используется как "консоль" с возможностью скопировать из нее, выводить цветной текст и т.д.

но при последовательном добавлении строк в него они "буферизуются", то есть, не показываются сразу после добавления, а появляются все вместе, когда вывод завершается и управление переходит на ожидание действий пользователя

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

текст добавляется в объект таким образом:

Код:
		listOutput->moveCursor( QTextCursor::End );
listOutput->insertPlainText( aString );
Записан

2^7-1 == 127, задумайтесь...
Павел_F.
Гость
« Ответ #1 : Февраль 18, 2010, 10:54 »

Вопрос возник. А почему QTextEdit?
Цитата: справка гласит
QPlainTextEdit is an advanced viewer/editor supporting plain text. It is optimized to handle large documents and to respond quickly to user input.

QPlainText uses very much the same technology and concepts as QTextEdit, but is optimized for plain text handling.
Т.е. вроде как QPlainTextEdit более подходит к вашей задаче. Он, если верить справке, должен работать быстрее. И у него уже будет метод void QPlainTextEdit::appendPlainText ( const QString & text ). Да и ваша проблема в нем, полагаю, должна решиться сама собой.

PS: правда он появился в Qt 4.4
« Последнее редактирование: Февраль 18, 2010, 11:01 от Павел_F. » Записан
Гурман
Гуру общения
******
Offline Offline

Сообщений: 1442

Qt 2.2, 3.3, 4.5, 4,7, 4.8, 5.3, 5.6, 5.9, 5.12


Просмотр профиля
« Ответ #2 : Февраль 18, 2010, 11:01 »

возможно надо его использовать, просто подключили по-началу то, что первое на взгляд подходит

ну и вроде как QTextEdit позволяет внутри параграфа менять шрифт и, что важнее, цвет текста, а QPlainTextEdit только устанавливать на параграф целиком
« Последнее редактирование: Февраль 18, 2010, 11:06 от Гурман » Записан

2^7-1 == 127, задумайтесь...
Павел_F.
Гость
« Ответ #3 : Февраль 18, 2010, 11:19 »

Я никогда не сталкивался с задачей раскрасить текст, поэтому уверенно говорить об этом не могу.
Но в той же справке упоминается что "Just like QPlainTextEdit works together with QSyntaxHighlighter." А если оно позволяет организовать подсветку синтаксиса то, полагаю, текст тоже разрисовать можно по всякому.
Записан
Гурман
Гуру общения
******
Offline Offline

Сообщений: 1442

Qt 2.2, 3.3, 4.5, 4,7, 4.8, 5.3, 5.6, 5.9, 5.12


Просмотр профиля
« Ответ #4 : Февраль 18, 2010, 11:45 »

а, ну да, там написано "Each character within a paragraph has its own attributes, for example, font and color."

хотя не хляет с первого раза - переделал на QPlainTextEdit, визуально скорости не добавилось (может незначительно), и появились ненужности - выводимую строку считает "параграфом", добавляет вывод \n после нее, даже если строка символа \n не содержит, хотя надо настройками поиграть

и тоже "буферизует"...   Злой если вывести 10000 раз строку, задержка секунд 12, и потом все сразу появляется

а не может это какой-нибудь другой связанный с текстом объект вытворять? тут и QWidget, и QFrame... все равно не ясно, как заставить текст появляться после вывода каждой строки

Записан

2^7-1 == 127, задумайтесь...
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #5 : Февраль 18, 2010, 12:12 »

Код:
		listOutput->moveCursor( QTextCursor::End );
listOutput->insertPlainText( aString );
может по-простому добавить
Код:
listOutput->repaint();
Записан
Павел_F.
Гость
« Ответ #6 : Февраль 18, 2010, 12:20 »

Вот и я бы думал что копать надо в сторону всяких QPainter'ов. Скорее это их рук дело.
Записан
Гурман
Гуру общения
******
Offline Offline

Сообщений: 1442

Qt 2.2, 3.3, 4.5, 4,7, 4.8, 5.3, 5.6, 5.9, 5.12


Просмотр профиля
« Ответ #7 : Февраль 18, 2010, 12:21 »

хм... помогло  Смеющийся

а в параграф строку превращает вызов appendPlainText()

если ставить курсор в конец, и потом insertPlainText() то нормально получается
« Последнее редактирование: Февраль 18, 2010, 16:48 от Гурман » Записан

2^7-1 == 127, задумайтесь...
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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