[英]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.