我有一个QLineEdit,用户将输入一个名称(不一定是人名),并且不会渲染该角色。 它看起来像:
如何配置QLineEdit编码以使该字符可见?
答案 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-C
或CJK-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扩展的系统字体。