我必须在 QTextEdit 中显示一些特殊字符,如 ¼、½ 等,这些字符不在 QWERTY 键盘上。我可以在 QTextEdit 中键入这些字符,也可以粘贴它们。但是当我尝试以编程方式设置这些字符时,QTextEdit 会显示一个额外的字符'Â'。
我在输入和粘贴时没有遇到这个问题。这些字符是用一些 Alt+[code] 代码键入的。
我在 Windows 8 64 位上使用 Qt 4.8。
#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 中?
【问题讨论】:
【参考方案1】:您的源代码需要使用 UTF-8 编码编写,并且您应该在 Qt 5 中使用 QStringLiteral
或在 Qt 4 中使用 QString::fromUtf8
。这样您就不会遇到这个问题了。
例如:
t.setPlainText(QStringLiteral("¼, ½")); // Qt 5
t.setPlainText(QString::fromUtf8("¼, ½")); // Qt 4
确保您使用的编辑器设置为将文件编码为 UTF-8,而不是拉丁文 1 等。
【讨论】:
【参考方案2】:使用 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);
...
或者就地转换字符:
t.setPlainText(QObject::trUtf8("¼2½ \n"));
【讨论】:
它会在整个应用程序中工作吗? QTextCodec 与 QTextEdit 有什么关系?我的意思是我们不需要 QTextEdit/QApplication 上的 setter() 函数吗? 我编辑了我的答案。是的,它将在全球范围内工作。 QTextCodec 为整个应用程序设置编码,所以它应该在 main() 中设置。或者,请参阅我的答案的第二部分。