在QT的显示过程中,往往会出于某种需要来改变特定某些行的输入格式,如下图,异常的情况下我希望异常信息以红色显示,但QTextEdit作为一个整体,往往改变了一个输入整体就都变了,比如说改变了字体颜色整个QTextEdit中的颜色都会发生改变。经过查询,用html可以实现如下图的效果,但是用html又有一个新的问题,就是中文显示的问题。在同学的帮助下,终于成功实现了利用html更改特定行的输入格式并显示图中的效果,现将代码做简单整理,或许对某些有同样需求的同行有所帮助。
关键代码只有三行,先给出代码后做解释:
QString tmpqstring1 = GBK::ToUnicode("<br/><span style='color:#FF4500;'>轻微波动</span><br/><br/>");
string tmpstring1 = tmpqstring1.toStdString();
ui.statusCollect->insertHtml(tmpstring1.c_str());
注意,第一行的GBK是一个
阿发老师写的一个编码格式转换的类(推荐其QT课程),ToUnicode就是将欲输入的转换为Unicode格式,放在头文件里引用就好了,具体代码最后给出。第一行中主要是html格式设置了颜色为红色,中文为“轻微波动”,第二行代码转为string类型,第三行取c_str()然后以html的格式插入到QTextEdit中去,这样就可以利用html在QTextEdit中某些特定行以特定格式显示中文了。我不太熟悉html,但是这样的确可以实现中文特定格式显示在QTextEdit中的特定位置。就是这么神奇!
#ifndef _QT_GBK_H
#define _QT_GBK_H
#include <QString>
#include <QTextCodec>
#include <string>
using std::string;
class GBK
{
public:
// QString(Unicode) -> std::string (GBK)
static string FromUnicode(const QString& qstr)
{
QTextCodec* pCodec = QTextCodec::codecForName("gb2312");
if(!pCodec) return "";
QByteArray arr = pCodec->fromUnicode(qstr);
string cstr = arr.data();
return cstr;
}
// std::string (GBK) -> QString(Unicode)
static QString ToUnicode(const string& cstr)
{
QTextCodec* pCodec = QTextCodec::codecForName("gb2312");
if(!pCodec) return "";
/* 注: 如果pCodec为NULL, 则说明你的Qt安装位置不是默认位置,
具体解决方法看Qt篇的《常见问题汇总》! */
QString qstr = pCodec->toUnicode(cstr.c_str(), cstr.length());
return qstr;
}
// QString(Unicode) -> std::string (GBK)
static string w2a(const QString& qstr)
{
return FromUnicode(qstr);
}
// std::string (GBK) -> QString(Unicode)
static QString a2w(const string& cstr)
{
return ToUnicode(cstr);
}
};
#endif