2015-06-30 2 views
3

У меня есть QLineEdit, где пользователь вводит имя (не обязательно имя человека), и символ не отображается. Это выглядит следующим образом:QLineEdit японский/китайский символ не отображается

enter image description here

Как я должен настроить кодировку QLineEdit, чтобы получить этот символ видимого?

+0

Вы пробовали 'QLocale'? как 'lineEdit.setLocale (QLocale :: Chinese);' –

+0

все еще не работает ... –

+1

QtCreator (3.2, Qt 5.3) сам не способен правильно показать этого персонажа. Эта версия Qt полностью поддерживает Unicode 6.2. Убедитесь, что символ определен для 6.2: http://www.unicode.org/Public/6.2.0/charts/CodeCharts.pdf. – mhcuervo

ответ

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. Тем не менее, он корректно отображается в ярлыках и в других текстовых элементах управления, если проект построен по Qt 5.5.1.


Оказывается, что по крайней мере Qt 5.5.1 требуется найти такой символ, если его нет в шрифт по умолчанию для управления пользовательского интерфейса.

Механизм отбрасывания шрифта по умолчанию реализуется только в Qt 5.5.1, поэтому даже Q 5.5.0 не может правильно отобразить символ, если он не найден в выбранном шрифте.

Я предполагаю, что улучшение выполнено с помощью Qt commit 5e3e34731b7880ac775e8f1fa156ce016e6820f1 Default implementation for QPlatformFontDatabase::fallbacksForFamily() (возможно, в связи с предыдущими [QFontDatabase] Defer the fallback families list initialization).


Однако все же можно отобразить этот символ в более ранних версиях Qt (даже в Qt4). Можно установить ручной шрифт, который поддерживает необходимые символы.

Например, есть шрифт «SimSun-EXTB» в Windows, который поддерживает CJK Unified Идеограммы Extension B. Этот шрифт можно настроить вручную на определенные виджеты пользовательского интерфейса или всего приложения:

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

Теперь в состоянии найти автоматически CJK-B символы в шрифте системы Windows, «SimSun-EXTB» и CJK-C символы в «BabelStoneHan», если Qt 5.5.1 используется приложение ,


Шрифт улучшение запасного варианта в Qt 5.5.1 в основном влияет на Windows, так как в Ubuntu Linux приложение может найти подходящие шрифты для символов, даже с более старыми версиями Qt (если шрифты добавляют QFontDatabase::addApplicationFont, так как есть нет системных шрифтов для расширений CJK по умолчанию).

+0

Что вы говорите правильно! Спасибо! –

+0

@JacobKrieg Обратите внимание, что в любом случае в системе должен быть доступен какой-либо шрифт, который может отображать требуемые символы. Может потребоваться доставить некоторые шрифты с помощью приложения, поскольку по умолчанию операционные системы не имеют шрифтов для всех расширений CJK. –

Смежные вопросы