wake-up-neo.com

QTextEdit mit verschiedenen Textfarben (Qt/C++)

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.

26
user924

Verwenden Sie als HTML formatierten Text, zum Beispiel:

textEdit->setHtml(text);

wobei text ein HTML-formatierter Text ist, der farbige Linien usw. enthält.

24
mosg

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

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.

27
badgerr

Link zu doc ​​

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

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

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:

 enter image description here

Natürlich kannst du vorher noch Datum und Uhrzeit und andere coole Sachen hinzufügen :)

0
Saeid Yazdani