Ich habe eine QTextEdit
-Box, die Text anzeigt, und ich möchte die Textfarbe für verschiedene Textzeilen in derselben QTextEdit
-Box einstellen können. (d. h. Zeile 1 könnte rot sein, Zeile 2 kann schwarz sein usw.)
Ist dies in einer QTextEdit
-Box möglich? Wenn nicht, wie kann man dieses Verhalten am einfachsten erreichen?
Vielen Dank.
Verwenden Sie als HTML formatierten Text, zum Beispiel:
textEdit->setHtml(text);
wobei text ein HTML-formatierter Text ist, der farbige Linien usw. enthält.
DasONLY, das für mich funktionierte, war HTML.
Code-Snippet folgt.
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);
Nur eine kurze Ergänzung: Wenn Sie das Textfeld programmatisch mit dem HTML-Element füllen möchten, können Sie die HTML-Datei selbst erstellen, indem Sie textEdit->setTextColor(QColor&)
verwenden. Sie können das QColor-Objekt selbst erstellen oder eine der vordefinierten Farben im Qt-Namespace verwenden (Qt :: black, Qt :: red usw.). Die angegebene Farbe wird auf jeden hinzugefügten Text angewendet, bis er erneut mit einem anderen aufgerufen wird.
Ein paar Zitate:
QTextEdit ist ein erweiterter WYSIWYG-Viewer/-Editor, der die Rich-Text-Formatierung mit .__ unterstützt. Tags im HTML-Stil Es ist darauf ausgelegt, große Dokumente zu verarbeiten und schnell auf .__ zu reagieren. Benutzereingabe.
.
Die Textbearbeitung kann sowohl Nur-Text- als auch HTML-Dateien laden (eine Untermenge von HTML 3.2 und 4).
.
QTextEdit kann eine große HTML-Teilmenge einschließlich Tabellen und Bildern anzeigen.
Dies bedeutet meistens veraltete Tags und enthält daher kein aktuelles CSS. Daher habe ich mich dem folgenden zugewandt:
// 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 );
Erweiterung auf https://stackoverflow.com/a/13287446/1619432 :
QTextEdit::append()
fügt einen neuen Absatz mit dem zuvor festgelegten FontWeight/TextColor .insertHTML()
oder InsertPlainText()
ein, um das Einfügen eines neuen Absatzes (z. B. um unterschiedliche Formate in einer einzelnen Zeile zu erreichen) zu vermeiden, die Schriftart-/Farbeinstellungen nicht zu berücksichtigen.
Verwenden Sie stattdessen 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!" );
...
Dies ist meine Lösung für eine sehr einfache Fehlerprotokollierung mit QTextEdit.
// In some common header file
enum class ReportLevel {
Info,
Warning,
Error
};
// Signal in classes who report something
void reportStatus(ReportLevel level,
const QString& tag,
const QString& report);
// Slot in the class which receives the reports
void MyGreatClass::handleStatusReport(ReportLevel level,
const QString& tag,
const QString& report)
{
switch(level) {
case ReportLevel::Info:
mTeReports->setTextColor(Qt::blue);
break;
case ReportLevel::Warning:
mTeReports->setTextColor(QColor::fromRgb(255, 165, 0)); // Orange
break;
case ReportLevel::Error:
mTeReports->setTextColor(Qt::red);
break;
}
// mTeReoports is just an instance of QTextEdit
mTeReports->insertPlainText(tag + "\t");
mTeReports->setTextColor(Qt::black); // set color back to black
// might want ot use #ifdef for windows or linux....
mTeReports->insertPlainText(report + "\r\n");
// Force the scroll bar (if visible) to jump to bottom
mTeReports->ensureCursorVisible();
}
So sieht es aus:
Natürlich kannst du vorher noch Datum und Uhrzeit und andere coole Sachen hinzufügen :)