QTextEdit更改特定某些行的字型格式
阿新 • • 發佈:2019-02-12
在QT的顯示過程中,往往會出於某種需要來改變特定某些行的輸入格式,如下圖,異常的情況下我希望異常資訊以紅色顯示,但QTextEdit作為一個整體,往往改變了一個輸入整體就都變了,比如說改變了字型顏色整個QTextEdit中的顏色都會發生改變。經過查詢,用html可以實現如下圖的效果,但是用html又有一個新的問題,就是中文顯示的問題。在同學的幫助下,終於成功實現了利用html更改特定行的輸入格式並顯示圖中的效果,現將程式碼做簡單整理,或許對某些有同樣需求的同行有所幫助。
關鍵程式碼只有三行,先給出程式碼後做解釋:
注意,第一行的GBK是一個阿發老師寫的一個編碼格式轉換的類(推薦其QT課程),ToUnicode就是將欲輸入的轉換為Unicode格式,放在標頭檔案裡引用就好了,具體程式碼最後給出。第一行中主要是html格式設定了顏色為紅色,中文為“輕微波動”,第二行程式碼轉為string型別,第三行取c_str()然後以html的格式插入到QTextEdit中去,這樣就可以利用html在QTextEdit中某些特定行以特定格式顯示中文了。我不太熟悉html,但是這樣的確可以實現中文特定格式顯示在QTextEdit中的特定位置。就是這麼神奇!QString tmpqstring1 = GBK::ToUnicode("<br/><span style='color:#FF4500;'>輕微波動</span><br/><br/>"); string tmpstring1 = tmpqstring1.toStdString(); ui.statusCollect->insertHtml(tmpstring1.c_str());
#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