QTextEdit with different text colors (Qt / C++)
Solution 1
Use text formated as HTML, for example:
textEdit->setHtml(text);
where text, is a HTML formated text, contains with colored lines and etc.
Solution 2
Just a quick addition: an alternative to generating the html yourself, if you're populating the text box programatically, is to use textEdit->setTextColor(QColor&)
. You can create the QColor object yourself, or use one of the predefined colours in the Qt namespace (Qt::black, Qt::red, etc). It will apply the specified colour to any text you add, until it is called again with a different one.
Solution 3
The ONLY thing that worked for me was html.
Code snippet follows.
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);
Solution 4
A few quotes:
QTextEdit is an advanced WYSIWYG viewer/editor supporting rich text formatting using HTML-style tags. It is optimized to handle large documents and to respond quickly to user input.
.
The text edit can load both plain text and HTML files (a subset of HTML 3.2 and 4).
.
QTextEdit can display a large HTML subset, including tables and images.
This means mostly deprecated tags and as such does not include any current CSS, so I turned to this:
// 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 );
Solution 5
Extending on https://stackoverflow.com/a/13287446/1619432:
QTextEdit::append()
inserts a new paragraph with the previously set FontWeight / TextColor.
insertHTML()
or InsertPlainText()
to avoid inserting a new paragraph (e.g. to achieve different formats in a single line) do not respect the font/color settings.
Instead use 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!" );
...
user924
Updated on January 25, 2020Comments
-
user924 over 4 years
I have a
QTextEdit
box that displays text, and I'd like to be able to set the text color for different lines of text in the sameQTextEdit
box. (i.e. line 1 might be red, line 2 might be black, etc.)Is this possible in a
QTextEdit
box? If not, what's the easiest way to get this behavior?Thanks.
-
SirDarius over 9 yearsThis is by far the simplest solution to do so. Works like a charm for example for logging, where each line is colored according to the message's severity.
-
Master Yoda about 9 yearsbut this only colors all the text present , i want to color each color with a diff color , can u please help me with that ?
-
Master Yoda about 9 yearsthis answer taught me new things
-
earth over 8 yearsThis wound up working for me. One line is one color, and the next line is a different color. In this example, after "Hello World", you would put lines
format.setForeground( QBrush( QColor( "white" ) ) );
andcursor.setCharFormat( format );
andcursor.insertText( "This line is white" );
. -
e-holder about 8 yearsIf you are using a 'textEdit' object, it will color the text of each 'append' call with a different color.
-
Ternvein over 4 yearsThe problem is that original text colour is theme-dependent and may be anything, not only black.
-
Owl over 3 yearsNo. This isn't necessary.