2010-05-18 1139 views
23

我有一個QTextEdit框顯示文本,我希望能夠在同一個QTextEdit框中設置不同文本行的文本顏色。 (即線1可能是紅色的,線2可能是黑色的等)QTextEdit具有不同的文本顏色(Qt/C++)

這是可能在QTextEdit框?如果不是,獲得這種行爲的最簡單方法是什麼?

謝謝。

回答

20

格式化爲HTML使用文字,例如:

textEdit->setHtml(text); 

其中文本,是一個HTML格式化文本,用彩色線條包含等

23

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

+2

這是迄今爲止最簡單的辦法這樣做。像日誌記錄那樣起作用,每條線都根據消息的嚴重程度進行着色。 – SirDarius 2014-11-17 17:58:04

+0

但這隻會使所有文字都呈現出來,我想用不同的顏色給每種顏色上色,你能幫我解決嗎? – 2015-06-17 15:46:54

+1

如果您使用的是'textEdit'對象,它將使用不同的顏色爲每個'append'調用的文本着色。 – 2016-04-19 16:38:13

28

只有爲我工作的東西是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); 
9

Link to doc

幾個報價:

的QTextEdit是一個高級的所見即所得的瀏覽器/編輯器使用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); 
+0

+1爲設置屬性,然後附加它 – Niklas 2013-08-12 04:16:06

6

擴展上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!"); 
... 
+1

+ 1爲'ìnsertText' – Niklas 2013-08-12 04:17:37

+0

這個答案教會了我新的東西 – 2015-06-17 17:16:38

+0

這個結束了爲我工作。一行是一種顏色,下一行是不同的顏色。在這個例子中,在「Hello World」之後,你會放入'format.setForeground(QBrush(QColor(「white」)));''和'cursor.setCharFormat(format);'''cursor.insertText(「This line是白色的「);'。 – orbit 2016-03-20 08:19:53