Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets > [Qt] Html в QTextEdit


Автор: pan2004 4.3.2009, 20:36
Возможно это больше вопрос к ХТМЛовцам, но если честно особого опыта у меня нет ни в HTML ни в Qtшном Rich Text Engine. В общем к делу. Окошко чата в одной программе решено сделать через QTextEdit. Для визуального отделения реплик пришла мне в голову гениальная идея smile использовать для этого горизонтальные линии. Итак как это выглядит. Пусть chatTEdit это окошко чата, myText текст реплики. Имеем:
Код
ui->chatTEdit->append(myText + "<hr>");

Так вот, это не работает. Горизонтальная линия добавляется, но начиная со второго вызова append почему-то происходит вставка сразу двух(!) линий за раз. Вот как это выглядит:
user posted image
Но это не самое интересное. В попытках разобраться, добавил еще одно PlainTextEdit окошко, в которое сбрасывал по сигналу textChanged HTML код окна чата. Вот полученный результат:(каким бы странным это ни казалось, код соответствует рисунку выше(!))
Код
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
<html><head><meta name="qrichtext" content="1" /><style type="text/css">
p, li { white-space: pre-wrap; }
</style></head><body style=" font-family:'DejaVu Sans'; font-size:9pt; font-weight:400; font-style:normal;">
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Привет братаны!</p>    <!-- так ладно это первая реплика, но где остальные?! -->
<hr /> <!-- Почему здесь вдруг ПЯТЬ тегов hr!? -->
<hr />
<hr />
<hr />
<hr /></body></html>

Что делать? Бьюсь уже вторые сутки...

Автор: SABROG 4.3.2009, 22:05
Это баг. И судя по истории трекера он то исправляется, то появляется.

Автор: pan2004 4.3.2009, 22:19
можно ссылку на запись трекера?

Автор: SABROG 4.3.2009, 22:24
http://www.qtsoftware.com/developer/task-tracker/index_html?method=entry&id=199663
http://www.qtsoftware.com/developer/task-tracker/index_html?method=entry&id=225896
http://lists.trolltech.com/qt-interest/2008-04/thread00224-0.html

Там их несколько на самом деле. Попробуй еще вариант с "<hr>text</hr>". Правда то, что полоса появляется поверх первой записи некрасиво.

Автор: pan2004 4.3.2009, 22:42
но зато работает. Некрасиво, да, но я думаю реально это обойти if ом. Спасибо smile 

Автор: SABROG 4.3.2009, 22:48
Вот такой код еще нашел, может адаптируешь:

Код

void MyTextEdit::addSeparatorLine()
{
    QTextDocumentFragment fragment = QTextDocumentFragment::fromHtml("<hr>");
    QTextCursor cursor(document());
    cursor.movePosition(QTextCursor::End);
    cursor.insertFragment(fragment);
}


Автор: Madonna 22.1.2010, 12:27
При добавлении append, повляется по 4 дубля.  smile 

Цитата(pan2004 @  4.3.2009,  20:42 Найти цитируемый пост)
но зато работает. Некрасиво, да, но я думаю реально это обойти if ом. Спасибо smile  

а можно поподробнее?

P.S. qt 4.6.1, win7

Добавлено через 5 минут и 15 секунд
Цитата(SABROG @  4.3.2009,  20:24 Найти цитируемый пост)
"<hr>text</hr>".

Ещё хочется вывести из Qstring...
Код

Qstring str;
if (...) str = "blabla1";
if (...) str = "blabla2"
if (...) str = "blabla3"
ui->textEdit_Blabla->append(str);


Добавлено через 5 минут и 38 секунд
как-то так

Автор: Madonna 24.1.2010, 16:33
Теперь нормально отображется и дебаг версии тоже. Оо.
Ничего не меняла, наоборот методы добавила. 
Интересно, из-за чего так.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)