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 и т. д.). Он будет применять указанный цвет к любому добавляемому тексту, пока он не будет вызван снова с другим.


ссылка на doc

несколько цитат:

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!" );
...