【问题标题】:QTextEdit doesn't display special characters not available on keyboardQTextEdit 不显示键盘上不可用的特殊字符
【发布时间】:2016-12-25 13:44:40
【问题描述】:

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

【问题讨论】:

    标签: c++ qt qt4


    【解决方案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() 中设置。或者,请参阅我的答案的第二部分。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多