QTextEdit更改特定某些行的字体格式

来源:互联网 发布:淘宝网豆豆鞋 编辑:程序博客网 时间:2024/06/05 09:51

在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

阅读全文
0 0
原创粉丝点击