2016-12-25 120 views
0

上没有的特殊字符我要显示一些特殊字符,如¼,½等在一个QTextEdit这不在QWERTY keyboard.I我能够在的QTextEdit并且还键入这些字符能够粘贴它们。但是当我尝试以编程方式设置这些字符时,QTextEdit会显示一个额外的字符'Â'。的QTextEdit不显示键盘

而打字和粘贴我不明白这个问题。这些字符用一些Alt + [code]代码键入。

我使用Qt 4.8的Windows 8 64位。

#include<QtGui> 

int main(int argc, char *argv[]) 
{ 
QApplication a(argc, argv); 
QTextEdit t; 
    t.setPlainText("¼2½ \n");    // QTextEdit displays=> ¼2½ 
    // t.setHtml("¼2½ \n");    // QTextEdit displays=> ¼2½ 
    // t.insertHtml("¼2½ \n");   // QTextEdit displays=> ¼2½ 
    // t.insertPlainText("¼2½ \n");  // QTextEdit displays=> ¼2½ 
// also tried setHtml() with HTML code which works in Firefox didn't help me 
    t.show(); 
    return a.exec(); 
} 

我该如何将这些字符以编程方式放在QTextEdit中而没有这个额外的字符?

回答

0

使用QTextCodec来以UTF-8编码显示字符。在地方

#include <QTextCodec> 
... 
QTextCodec* codec=QTextCodec::codecForName("UTF-8"); 
// QTextCodec::setCodecForLocale(codec); //if you want everything to be in UTF-8 
QTextCodec::setCodecForCStrings(codec); 
QApplication a(argc, argv); 
... 

或转换的字符:需要UTF-8编码写入

t.setPlainText(QObject::trUtf8("¼2½ \n")); 
+0

将它整个的应用吗? QTextCodec如何与QTextEdit相关?我的意思是我们不需要QTextEdit/QApplication上的setter()函数。 – stackOverflow

+0

我编辑了我的答案。是的,它会在全球范围内运作。 QTextCodec为整个应用程序设置编码,所以它应该在main()中设置。或者,请参阅我的答案的第二部分。 – 2016-12-25 14:20:52

2

你的源代码,您应该使用Qt 4,你不会使用Qt 5或QString::fromUtf8使用QStringLiteral那么问题就来了。

例如为:

t.setPlainText(QStringLiteral("¼, ½")); // Qt 5 
t.setPlainText(QString::fromUtf8("¼, ½")); // Qt 4 

确保您使用设置为文件为UTF-8编码的编辑器,而不是拉丁语1等