簡體   English   中英

QTextEdit具有不同的文本顏色(Qt / C ++)

[英]QTextEdit with different text colors (Qt / C++)

我有一個顯示文本的QTextEdit框,並且我希望能夠在同一QTextEdit框中為不同的文本行設置文本顏色。 (即第1行可能是紅色,第2行可能是黑色,等等。)

QTextEdit框中可以嗎? 如果不是,那么獲得此行為的最簡單方法是什么?

謝謝。

對我唯一有用的是html。

代碼段如下。

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

只是快速補充:如果您以編程方式填充文本框,則可以自己生成html的一種替代方法是使用textEdit->setTextColor(QColor&) 您可以自己創建QColor對象,也可以在Qt名稱空間中使用預定義的顏色之一(Qt :: black,Qt :: red等)。 它將指定的顏色應用於您添加的任何文本,直到用另一種顏色再次調用它為止。

使用格式化為HTML的文本,例如:

textEdit->setHtml(text);

其中text是HTML格式的文本,包含彩色線條等。

鏈接到文檔

一些引號:

QTextEdit是一種高級WYSIWYG查看器/編輯器,支持使用HTML樣式的標記進行富文本格式。 它經過優化,可處理大型文檔並快速響應用戶輸入。

文本編輯可以加載純文本和HTML文件(HTML 3.2和4的子集)。

QTextEdit可以顯示大的HTML子集,包括表格和圖像。

這意味着大部分不推薦使用的標簽,因此不包括任何當前的CSS,因此我轉向:

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

擴展到https://stackoverflow.com/a/13287446/1619432

QTextEdit::append()插入具有先前設置的FontWeight / TextColor的新段落。 insertHTML()InsertPlainText()避免插入新段落(例如,在一行中實現不同格式)不遵守字體/顏色設置。

而是使用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!" );
...

這是我使用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();
}

它是這樣的:

在此處輸入圖片說明

當然,您可以繼續添加日期/時間和其他有趣的內容:)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM