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

来源:互联网 发布:ubuntu默认密码环 编辑:程序博客网 时间:2024/05/21 17:35

            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函数。函数参数为空即可。


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

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

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

最终版代码为



//正常日志输出
voidMainWindow::changeText(intm, 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内容的末尾
 
}
//异常日志输出
voidMainWindow::changetext(intm, QString s, intn)
{
 
        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);
}
0 0
原创粉丝点击