QTextEdit con diferentes colores de texto(Qt/C++)
colors (5)
Tengo un cuadro QTextEdit
que muestra texto, y me gustaría poder establecer el color del texto para diferentes líneas de texto en el mismo cuadro QTextEdit
. (es decir, la línea 1 podría ser roja, la línea 2 podría ser negra, etc.)
¿Es esto posible en un cuadro QTextEdit
? Si no, ¿cuál es la forma más fácil de obtener este comportamiento?
Gracias.
Lo único que funcionó para mí fue html.
El fragmento de código sigue.
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);
Se extiende en https://.com/a/13287446/1619432 :
QTextEdit::append()
inserta un nuevo párrafo con el FontWeight / TextColor previamente configurado. insertHTML()
o InsertPlainText()
para evitar insertar un nuevo párrafo (por ejemplo, para lograr diferentes formatos en una sola línea) no respetan las configuraciones de fuente / color.
En su lugar, 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!" );
...
Solo una adición rápida: una alternativa para generar el html usted mismo, si está completando el cuadro de texto de forma programática, es usar textEdit->setTextColor(QColor&)
. Puede crear el objeto QColor usted mismo, o usar uno de los colores predefinidos en el espacio de nombres Qt (Qt :: black, Qt :: red, etc.). Aplicará el color especificado a cualquier texto que agregue, hasta que se vuelva a llamar con uno diferente.
Use texto formateado como HTML, por ejemplo:
textEdit->setHtml(text);
donde el texto , es un texto con formato HTML, contiene líneas de color, etc.
Algunas citas:
QTextEdit es un visor / editor WYSIWYG avanzado que admite el formato de texto enriquecido con etiquetas de estilo HTML. Está optimizado para manejar documentos grandes y responder rápidamente a la entrada del usuario.
.
La edición de texto puede cargar tanto texto sin formato como archivos HTML (un subconjunto de HTML 3.2 y 4).
.
QTextEdit puede mostrar un gran subconjunto de HTML, incluidas tablas e imágenes.
Esto significa principalmente etiquetas obsoletas y, como tal, no incluye ningún CSS actual, así que recurrí a esto:
// 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 );