【问题标题】:Qt dont support Unicode for Visual studio or Font errorQt 不支持 Visual Studio 的 Unicode 或字体错误
【发布时间】:2020-03-09 23:57:37
【问题描述】:

我是初学者,现在我正在学习 Qt 并使用 Visual Studio,扩展 Qt VS 工具 2.4.3,我使用文本是越南语,当我构建程序时它很好,但按钮显示特殊字符。

我已经阅读了一些关于字体错误的主题,但与此错误无关。

我的代码:

#include <QtWidgets/QApplication>
#include <QPushButton>
#include <QLabel>

int main(int argc, char *argv[])
{
        QApplication app(argc, argv);
        QPushButton nutBam; // instance 
        nutBam.setText("Nút khẩn cấp !"); //set Text button
        nutBam.show();
        return app.exec();
}

【问题讨论】:

  • @eyllanesc - 现代版本的 Windows 支持所有字体的 Unicode。更有可能他的源文件中的 unicode 字符串存在编码问题。
  • 我添加了 nutBam.setFont(QFont("Courier"));但我也展示了

标签: c++ qt


【解决方案1】:

两个问题:

  1. 在源文件中包含硬编码的 unicode 字符通常不是一个好主意。编辑器和编译器有时可以做正确的事情。编辑器可以保存为 UTF-8 或 Unicode。编译器可以假设读取 BOM 标头并切换编码......通常。但是团队成员和源代码存储系统经常做错事。其他人带来了不同的编辑器、源代码控制系统等……而 unicode 的东西被弄乱了。它也破坏了差异工具。我已经看到它发生太多次了。

  2. Qt 的 QString 看到您正在将 8 位 ascii 字符串传递给 QString 构造函数。然后他们的编码解释规则开始生效。所以使用 unicode 字符串会更好。

为了两全其美,请将您的字符串存储在带有 unicode 转义字符的源代码中,但作为宽字符串传递给 QString 构造函数:

我使用this tool online 将您的一些字符转换为\uABCD 转义序列。

而不是这个:

nutBam.setText("Nút khẩn cấp !");

这个:

const wchar_t* text = L"N\u00fat kh\u1ea9n c\u1ea5p !";
QString qText(text);
nutBam.setText(qText);

尽管不再是问题,但请确保您的编辑器将源代码保存为 ANSI 或 UTF-8 而不是 16 位 unicode。

我目前没有在本地安装 Qt,但以上内容可能会合并为以下内容:

nutBam.setText(L"N\u00fat kh\u1ea9n c\u1ea5p !");

【讨论】:

  • 如果你觉得这个答案有用,别忘了点赞或接受。
猜你喜欢
  • 2019-01-16
  • 2014-07-07
  • 1970-01-01
  • 2018-05-18
  • 2021-04-22
  • 1970-01-01
  • 2015-04-24
  • 2016-09-01
  • 2016-07-06
相关资源
最近更新 更多