QTextEdit 不显示键盘上不可用的特殊字符

QTextEdit doesn't display special characters not available on keyboard

我必须在 QTextEdit 中显示一些特殊字符,如 ¼、½ 等,这些字符不在 QWERTY 键盘上 keyboard.I 我可以在 QTextEdit 中键入这些字符,也可以粘贴它们。但是当我尝试以编程方式设置这些字符时,QTextEdit 会显示一个额外的字符 'Â'。

我在输入和粘贴时没有遇到这个问题。这些字符是用一些 Alt+[代码] 代码键入的。

我在 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 中?

使用 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"));

您的源代码需要以 UTF-8 编码编写,并且您应该在 Qt 5 中使用 QStringLiteral 或在 Qt 4 中使用 QString::fromUtf8。那么您将不会有那个问题。

例如:

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

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