QLineEdit未显示日文/中文字符

时间:2015-06-30 12:16:06

标签: string qt unicode utf-8 utf-16

我有一个QLineEdit,用户将输入一个名称(不一定是人名),并且不会渲染该角色。 它看起来像:

enter image description here

如何配置QLineEdit编码以使该字符可见?

1 个答案:

答案 0 :(得分:3)

看起来解决方案非常简单。需要升级到Qt 5.5.1。

该符号也在Qt Creator 3.5.1的编辑器中正确显示,该编辑器基于Qt 5.5.1。在Qt Creator 3.2.1中(基于Qt 5.3.2),不显示符号。

符号在Qt 5.3.2的UI控件中显示为矩形。但是,如果项目是由Qt 5.5.1构建的,则它在标签和其他文本控件中正确显示。

如果在UI控件的默认字体中不存在此字符,则至少需要Qt 5.5.1才能找到。

默认字体后退机制仅在Qt 5.5.1中实现,因此如果在所选字体中找不到字符,则即使Q 5.5.0也无法正确显示该字符。

我认为改进是由Qt提交5e3e34731b7880ac775e8f1fa156ce016e6820f1 Default implementation for QPlatformFontDatabase::fallbacksForFamily()完成的(可能与之前的[QFontDatabase] Defer the fallback families list initialization有关)。

但是,仍然可以在较旧的Qt版本中显示该字符(即使在Qt4中)。可以手动设置支持所需符号的字体。

例如,Windows中有支持CJK Unified Ideographs Extension B的字体“SimSun-ExtB”。该字体可以手动设置为特定的UI小部件或整个应用程序:

QFont CJK_ExtB("SimSun-ExtB");
// font for widget
ui->lineEdit->setFont(CJK_ExtB);
// or default application font
QApplication::setFont(CJK_ExtB);

当然要显示一个字符,它应该以某种系统字体或应用程序加载的字体提供。默认情况下,Windows 7具有CJK Ext.B的字体,但要显示来自CJK-CCJK-D的符号,则需要其他字体。例如,有一个免费的Unicode CJK字体BabelStone Han,它涵盖了一些这样的符号。可以手动加载应用程序:

QFontDatabase::addApplicationFont("c:/test/BabelStoneHan.ttf");

现在,如果使用Qt 5.5.1,应用程序可以在Windows系统字体“SimSun-ExtB”中自动找到CJK-B符号,在“BabelStoneHan”中找到CJK-C符号。

Qt 5.5.1中的字体后备改进主要影响Windows,因为在Ubuntu Linux中,应用程序能够找到符号的正确字体,即使使用较旧的Qt版本(如果字体是由QFontDatabase::addApplicationFont添加的,因为有默认情况下,没有用于CJK扩展的系统字体。