Название: как избавиться от буферизации при добавлении в QTextEdit? Отправлено: Гурман от Февраль 18, 2010, 10:27 есть объект этого класса, используется как "консоль" с возможностью скопировать из нее, выводить цветной текст и т.д.
но при последовательном добавлении строк в него они "буферизуются", то есть, не показываются сразу после добавления, а появляются все вместе, когда вывод завершается и управление переходит на ожидание действий пользователя как лучше всего "протолкнуть" выводимый текст, чтобы он появлялся в окне сразу после добавления в QTextEdit? каждый раз отдавать управление на цикл ожидания - не хочется, может другие способы есть? текст в объект этого класса выводится довольно медленно, при добавлении всего пары сотен строк есть очень ощутимая задержка, на две-три секунды, поэтому еще больше тормозить никак не надо текст добавляется в объект таким образом: Код: listOutput->moveCursor( QTextCursor::End ); Название: Re: как избавиться от буферизации при добавлении в QTextEdit? Отправлено: Павел_F. от Февраль 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. Т.е. вроде как QPlainTextEdit более подходит к вашей задаче. Он, если верить справке, должен работать быстрее. И у него уже будет метод void QPlainTextEdit::appendPlainText ( const QString & text ). Да и ваша проблема в нем, полагаю, должна решиться сама собой.QPlainText uses very much the same technology and concepts as QTextEdit, but is optimized for plain text handling. PS: правда он появился в Qt 4.4 Название: Re: как избавиться от буферизации при добавлении в QTextEdit? Отправлено: Гурман от Февраль 18, 2010, 11:01 возможно надо его использовать, просто подключили по-началу то, что первое на взгляд подходит
ну и вроде как QTextEdit позволяет внутри параграфа менять шрифт и, что важнее, цвет текста, а QPlainTextEdit только устанавливать на параграф целиком Название: Re: как избавиться от буферизации при добавлении в QTextEdit? Отправлено: Павел_F. от Февраль 18, 2010, 11:19 Я никогда не сталкивался с задачей раскрасить текст, поэтому уверенно говорить об этом не могу.
Но в той же справке упоминается что "Just like QPlainTextEdit works together with QSyntaxHighlighter." А если оно позволяет организовать подсветку синтаксиса то, полагаю, текст тоже разрисовать можно по всякому. Название: Re: как избавиться от буферизации при добавлении в QTextEdit? Отправлено: Гурман от Февраль 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... все равно не ясно, как заставить текст появляться после вывода каждой строки Название: Re: как избавиться от буферизации при добавлении в QTextEdit? Отправлено: Igors от Февраль 18, 2010, 12:12 Код: listOutput->moveCursor( QTextCursor::End ); Код: listOutput->repaint(); Название: Re: как избавиться от буферизации при добавлении в QTextEdit? Отправлено: Павел_F. от Февраль 18, 2010, 12:20 Вот и я бы думал что копать надо в сторону всяких QPainter'ов. Скорее это их рук дело.
Название: Re: как избавиться от буферизации при добавлении в QTextEdit? Отправлено: Гурман от Февраль 18, 2010, 12:21 хм... помогло ;D
а в параграф строку превращает вызов appendPlainText() если ставить курсор в конец, и потом insertPlainText() то нормально получается |