C++ 使用不同文本颜色的QTextEdit(Qt/C+;+;)

C++ 使用不同文本颜色的QTextEdit(Qt/C+;+;),c++,qt,colors,qtextedit,C++,Qt,Colors,Qtextedit,我有一个显示文本的QTextEdit框,我希望能够为同一QTextEdit框中的不同文本行设置文本颜色。(即第1行可能为红色,第2行可能为黑色等) 在QTextEdit框中是否可以执行此操作?如果没有,最简单的方法是什么 谢谢。使用格式为HTML的文本,例如: textEdit->setHtml(text); 其中,text是一个HTML格式的文本,包含彩色线条等。只是一个快速添加:如果您以编程方式填充文本框,则可以使用textEdit->setTextColor(QColor&)。您可

我有一个显示文本的
QTextEdit
框,我希望能够为同一
QTextEdit
框中的不同文本行设置文本颜色。(即第1行可能为红色,第2行可能为黑色等)

QTextEdit
框中是否可以执行此操作?如果没有,最简单的方法是什么


谢谢。

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

textEdit->setHtml(text);

其中,text是一个HTML格式的文本,包含彩色线条等。

只是一个快速添加:如果您以编程方式填充文本框,则可以使用
textEdit->setTextColor(QColor&)
。您可以自己创建QColor对象,或者使用Qt名称空间中的一种预定义颜色(Qt::black、Qt::red等)。它会将指定的颜色应用于您添加的任何文本,直到用不同的颜色再次调用。

对我有效的只有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);
QString line=“包含来自某处的某些文本…”
:
:
QTextCursor=ui->messages->textCursor();
QString alertHtml=“”;
QString notifyHtml=“”;
QString infoHtml=“”;
QString endHtml=“
”; 开关(电平) { case msg_alert:line=alertHtml%line;中断; case msg_notify:line=notifyHtml%line;中断; case msg_info:line=infoHtml%line;中断; 默认值:line=infoHtml%line;中断; } 行=行%endHtml; 用户界面->消息->插入TML(行); cursor.movePosition(QTextCursor::End); 用户界面->消息->设置光标(光标);

几句话:

QTextEdit是一种高级WYSIWYG查看器/编辑器,支持使用 HTML样式标记。它经过优化,可以处理大型文档并快速响应 用户输入

文本编辑可以加载纯文本和HTML文件(HTML3.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 );
扩展至:

QTextEdit::append()
使用先前设置的FontWeight/TextColor插入新段落。
insertHTML()
InsertPlainText()
为避免插入新段落(例如,在一行中实现不同格式),请不要遵守字体/颜色设置

而是使用:


这是我使用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();
}
这就是它的样子:


当然,您可以继续添加日期/时间和其他很酷的东西:)

这是迄今为止最简单的解决方案。就像一个符咒,例如用于日志记录,其中每行都根据消息的严重性进行着色。但这只会对所有文本进行着色,我想用不同的颜色对每种颜色进行着色,你能帮我吗?如果你使用的是“textEdit”对象,它会给每个“追加”呼叫的文本涂上不同的颜色。这个答案教会了我新的东西,这个结果对我有用。一行是一种颜色,下一行是另一种颜色。在本例中,在“helloworld”之后,您将放置行
format.setForeground(QBrush(QColor(“white”))
游标.setCharFormat(格式)
游标.insertText(“此行为白色”)。问题是原始文本颜色取决于主题,可能是任何颜色,而不仅仅是黑色。否。这是没有必要的。
// 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();
}