c++ qt colors qtextedit

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.


Enlace al documento

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 );