使用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("&","&"); str.replace(">",">"); str.replace("<","<"); str.replace("\"","""); str.replace("\'","'"); str.replace(" "," "); 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);
}
0 0
- 使用textEdit显示日志。(改变文本颜色)
- 使用CColorListBox 实现文本改变颜色
- 使用CSS3改变文本选中的颜色
- QT textEdit,lineedit等改变字体颜色方法
- Xilinx SDK文本编辑器行号显示和背景颜色改变
- 改变STATIC文本颜色
- 改变文本颜色 textColor
- 关于VS2010中使用CColorListBox 实现文本改变颜色
- 使用CSS3改变文本选中的默认颜色
- 使用CSS3 ::selection伪元素改变文本选中颜色
- 改变UISearchBar的文本颜色
- ios9 状态栏 改变文本颜色
- echo 改变输出文本颜色
- Linux的shell中echo改变输出显示样式/输出带颜色的文本
- 改变linux终端显示颜色
- unix改变shell显示颜色
- linux 文本显示颜色配置
- Qt TextEdit 使用
- SQL语句大全
- *Fxx and string
- Android RGB565颜色byte数组转图片
- C++虚函数和纯虚函数的区别
- hash table and hash algorithm
- 使用textEdit显示日志。(改变文本颜色)
- linux指令 -- cp与touch
- kafka 使用
- 导入struts价包启动服务器报:jar not loaded. See Servlet Spec 3.0, section 10.7.2. Offending class: javax/servle
- xml报错-Multiple annotations found at this line
- git 分支合并
- http://blog.csdn.net/supreme42/article/details/7397241
- 关于 CreateEvent 和WaitForMultipleObjects以及 WaitForSingleObject 等函数的使用实例
- C實踐項目4.1—分離各位數