Russian Qt Forum

Qt => Общие вопросы => Тема начата: Hatebreeder от Март 08, 2010, 15:51



Название: QTextEdit и html
Отправлено: Hatebreeder от Март 08, 2010, 15:51
Достоточно строчки:
 ui->textEdit->acceptRichText();
...что бы работать с html? Как с помощью Rich text сделать цветным текст? Как потом все это сохранить в в файл что бы html остался?)
Малова-то в книгах информации по QText Edit. Подскажите пожалуйста.


Название: Re: QTextEdit и html
Отправлено: SABROG от Март 08, 2010, 17:06
Достоточно строчки:
 ui->textEdit->acceptRichText();
...что бы работать с html?

Этот метод возвращает true (по умолчанию) или false, если пользователю разрешается вставлять (из буфера обмена) или переносить (drag & drop, из браузера например) Rich Text. То есть с сохранением цветов, жирности, шрифта и прочее. Иначе вставляется как обычный текст (как в блокнот).

Вообще с этим QTextEdit дело ясное, что дело тёмное. Там такая замысловатая структура, что сам чёрт ногу сломит, а про обилие классов, которые всем этим управляют я вообще молчу. Вот например в чем разница, если я поставлю форматирование через тег "<span style="color: 'green'">Line 1</span>" или через такой код?:

Код
C++ (Qt)
    QTextDocument *document = edit->document();
    QTextCursor cursor(document);
 
    cursor.movePosition(QTextCursor::Start);
    cursor.movePosition(QTextCursor::EndOfLine, QTextCursor::KeepAnchor);
 
    QTextCharFormat format;
    format.setForeground(Qt::green);
 
    cursor.mergeCharFormat(format);
 

Вероятно в том, что во втором случае "html" код уже обработан и форматирование задано в "понятном" для Qt виде. Если мы захотим изменить цвет слова, то что большинство людей сделает? Добавит заново измененный "html" код или будет работать с классом QTextCharFormat? Если первый вариант влияет на состояние второго, то скорее всего, второй вариант никак не влияет на установленный html код. На экране видим белое по черному, а в html черное по белому.

Тут появляется класс QTextDocumentWriter. Ставим ему формат в котором будем сохранять writer.setFormat("HTML"). Загружать в QTextEdit обратно нужно будет уже через QFile. Всё бы ничего, но вот HTML не умеет хранить картинки или пользовательские текстовые объекты. Казалось бы решением мог бы быть "ODF", но пока в него можно только сохранить, а вот читать из него Qt еще не умеет. Жалко, что у QTextDocument нет поддержки QDataStream, жизнь бы упростилась.


Название: Re: QTextEdit и html
Отправлено: Hatebreeder от Март 10, 2010, 13:34
Спасибо большое.
Вроде все получилось. Вот только как сделать что бы этот код работал не только один раз, и не только с первой строчкой?
И выравнивание в html идет по всему тексту а не по выделенному, как в плаин текст. Как это можно поправить?