QTextEdit с различными цветами текста (Qt / C++)
у меня есть QTextEdit
поле, которое отображает текст, и я хотел бы иметь возможность установить цвет текста для разных строк текста в том же
5 ответов
используйте текст, сформированный как HTML, например:
textEdit->setHtml(text);
здесь текст, HTML-форматированный текст, содержит цветные линии и т. д.
на только вещь, которая работала для меня, была html.
фрагмент кода следующим образом.
QString line = "contains some text from somewhere ..."
:
:
QTextCursor cursor = ui->messages->textCursor();
QString alertHtml = "<font color=\"DeepPink\">";
QString notifyHtml = "<font color=\"Lime\">";
QString infoHtml = "<font color=\"Aqua\">";
QString endHtml = "</font><br>";
switch(level)
{
case msg_alert: line = alertHtml % line; break;
case msg_notify: line = notifyHtml % line; break;
case msg_info: line = infoHtml % line; break;
default: line = infoHtml % line; break;
}
line = line % endHtml;
ui->messages->insertHtml(line);
cursor.movePosition(QTextCursor::End);
ui->messages->setTextCursor(cursor);
просто быстрое добавление: альтернативой генерации html самостоятельно, если вы программно заполняете текстовое поле, является использование textEdit->setTextColor(QColor&)
. Вы можете создать объект QColor самостоятельно или использовать один из предопределенных цветов в пространстве имен Qt (Qt::black, Qt::red и т. д.). Он будет применять указанный цвет к любому добавляемому тексту, пока он не будет вызван снова с другим.
несколько цитат:
QTextEdit-это расширенный просмотрщик / редактор WYSIWYG, поддерживающий форматирование текста с использованием Теги в стиле HTML. Он оптимизирован для обработки больших документов и быстрого реагирования на пользовательский ввод.
.
текстовое редактирование может загружать как обычный текст, так и HTML-файлы (подмножество HTML 3.2 и 4).
.
QTextEdit может отображение большого подмножества HTML, включая таблицы и изображения.
Это означает, что в основном устаревшие теги и как таковые не включают текущий CSS, поэтому я обратился к этому:
// save
int fw = ui->textEdit->fontWeight();
QColor tc = ui->textEdit->textColor();
// append
ui->textEdit->setFontWeight( QFont::DemiBold );
ui->textEdit->setTextColor( QColor( "red" ) );
ui->textEdit->append( entry );
// restore
ui->textEdit->setFontWeight( fw );
ui->textEdit->setTextColor( tc );
расширение на https://stackoverflow.com/a/13287446/1619432:
QTextEdit::append()
вставляет новый абзац с ранее установленным значением FontWeight / TextColor.
insertHTML()
или InsertPlainText()
чтобы избежать вставки нового абзаца (например, для достижения разных форматов в одной строке), не соблюдайте настройки шрифта/цвета.
вместо того, чтобы использовать QTextCursor:
...
// textEdit->moveCursor( QTextCursor::End );
QTextCursor cursor( textEdit->textCursor() );
QTextCharFormat format;
format.setFontWeight( QFont::DemiBold );
format.setForeground( QBrush( QColor( "black" ) ) );
cursor.setCharFormat( format );
cursor.insertText( "Hello world!" );
...