使用textEdit显示日志。(改变文本颜色)

            QString strFirst(szText);
            stringToHtmlFilter(strFirst);
            stringToHtml(strFirst,clrB);
            ui->textEdit_SQL->insertHtml(strFirst);


由于项目需要,需要在界面上显示出软件运行过程中的各种日志。

运行过程在B类中,而界面显示在A类中。textEdit就放在A类中。

可以通过qt中的信号槽机制,在B类中设置信号,A类中设置槽函数。用来接收相应的

结果。通过textEdit->append(s);将结果输出到textEdit中,s即为运行中的日志。

append函数将自动实现换行。

后来又提出了异常日志和正常日志用不同的颜色显示。

参考博客http://blog.sina.com.cn/s/blog_9da24f3b0101jz1w.html

我的实现方法是

复制代码
//异常日志输出,增加一个参数与正常日志输出对比
void MainWindow::changetext(int m, QString s, int n)
{

        QColor  clrR(255,0,0);//红色
        stringToHtmlFilter(s);
        stringToHtml(s,clrR);
        textEdit[m]->append("");
        textEdit[m]->insertHtml(s);

}
//正常日志输出
void MainWindow::changeText(int m, QString s)
{
    QColor  clrR(0,0,0);//黑色
    stringToHtmlFilter(s);
    stringToHtml(s,clrR);
    textEdit[m]->insertHtml(s);
  

}
//根据html标记语言,将QString转化:

void MainWindow::stringToHtml(QString &str, QColor crl)
{
         QByteArray array;
         array.append(crl.red());
         array.append(crl.green());
         array.append(crl.blue());
         QString strC(array.toHex());
         str = QString("<span style=\" color:#%1;\">%2</span>").arg(strC).arg(str);
}
//由于html的特性,会导致一些特殊字符不能显示,例如用于标记的‘<’‘>’、空格,换行等。所以第一步需要对待添加的QString进行转化,转化成html支持的文本方式。使用如下函数
void MainWindow::stringToHtmlFilter(QString &str)
{
    //注意这几行代码的顺序不能乱,否则会造成多次替换
    str.replace("&","&amp;");
    str.replace(">","&gt;");
    str.replace("<","&lt;");
    str.replace("\"","&quot;");
    str.replace("\'","&#39;");
    str.replace(" ","&nbsp;");
    str.replace("\n","<br>");
    str.replace("\r","<br>");
}
复制代码
 

在使用过程中,我发现当异常日志输出后,其后的所有正常日志也变为红色。原来是正常日志输出我只使用了append函数

所以改变正常日志的输出代码

复制代码
//正常日志的输出时也设置一下格式就好了
void MainWindow::changeText(int m, QString s)
{
    QColor  clrR(0,0,0);
    stringToHtmlFilter(s);
    stringToHtml(s,clrR);
    textEdit[m]->insertHtml(s);
   

}
复制代码

设置完后又发现新问题,那就是所有日志是一行输出来的,没有实现换行,在异常日志输出前后增加append函数,正常日志输出后增加append函数。函数参数为空即可。


//正常日志输出
void MainWindow::changeText(int m, QString s)
{
    QColor  clrR(0,0,0);
    stringToHtmlFilter(s);
    stringToHtml(s,clrR);
    textEdit[m]->insertHtml(s);
    textEdit[m]->append("");
    
 
}
//异常日志输出
void MainWindow::changetext(int m, QString s, int n)
{
 
        QColor  clrR(255,0,0);
        stringToHtmlFilter(s);
        stringToHtml(s,clrR);
        textEdit[m]->append("");
        textEdit[m]->insertHtml(s);
        //m_TextBrowser->insertHtml(str);
        textEdit[m]->append("");
      
}

  这样就可以按要求输出了。在测试的时候不小心鼠标点了一下日志窗口,结果发现所有日志都在我点击过得地方输出了,完全乱了顺序。

所以在日志输出后增加一个设置光标的代码就好了。

最终版代码为



//正常日志输出
void MainWindow::changeText(int m, QString s)
{
    QColor  clrR(0,0,0);
    stringToHtmlFilter(s);
    stringToHtml(s,clrR);
    textEdit[m]->insertHtml(s);
    textEdit[m]->append("");
    textEdit[m]->moveCursor(QTextCursor::End);//光标移动到textedit内容的末尾
 
}
//异常日志输出
void MainWindow::changetext(int m, QString s, int n)
{
 
        QColor  clrR(255,0,0);
        stringToHtmlFilter(s);
        stringToHtml(s,clrR);
        textEdit[m]->append("");
        textEdit[m]->insertHtml(s);
        //m_TextBrowser->insertHtml(str);
        textEdit[m]->append("");
        textEdit[m]->moveCursor(QTextCursor::End);
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值