Qt Используйте несколько шрифтов в одно и то же время

У меня есть три шрифта, которые я хочу использовать в своем программном обеспечении:

  • FontA: содержит латинские, греческие, символы Cryllic
  • FontB: содержит корейские символы
  • FontC: содержит японские, китайские символы

Эти шрифты не имеют перекрытия.

Я хочу настроить мое приложение таким образом, чтобы все эти шрифты использовались сразу, так как символы из разных языков могут отображаться в том же контексте в моем программном обеспечении.

Если символ найден в FontA, используйте его. В противном случае, посмотрите на FontB, если вы его используете. Посмотрите на FontC в качестве последнего средства, если он найден, используйте его, иначе ничего не делайте.

Как настроить Qt таким образом?

(В моей среде встроен linux, Qt 4.8)

P.S.: Я пробовал QFont:: insertSubstitution, но он используется в случае, если FontA не установлен в системе, так что это действительно не помогает в моем случае.
P.P.S.: Объединение этих шрифтов в один шрифт не может быть и речи, поскольку они являются проприетарными шрифтами.

Ответ 1

Как и другие, - если ваша версия QT использует fontconfig, выполните ее через fontconfig, ее единственной функцией является управление подменой интеллектуального шрифта. И если ваша версия не использует fontconfig, вам не повезло, так как я сомневаюсь, что кто-то потратил много времени на то, чтобы заставить ее работать теперь, когда fontconfig широко доступен.

Ответ 2

Попробуйте использовать этот подход: Как (правильно) выводить многоязычный текст в Qt-Embedded?

Он работает с большим количеством языков одновременно (кириллица, европейская, тайская, японская и т.д.).

  • Поместите Droid Fonts (необязательно, он также должен работать с другими шрифтами) в каталог, где Qt может его найти,
  • Экспортировать специальную переменную среды: export QWS_NO_SHARE_FONTS=1
  • Запустите приложение с параметром -fn "Droid Sans"

Ответ 3

Qt имеет резервную обработку для таких ситуаций. В Документация Qt4 Я обнаружил, что вы можете настроить этот резервный механизм. Выглядит очень многообещающе и должно решить вашу проблему.

В Qt5 я не вижу прямой ссылки на класс QPlatformFontDatabase. Только this. Похоже, вы должны написать плагин. Кроме того, эта страница подсказывает, что QPlatformFontDatabase apeared в Qt 5.2, поэтому она должна работать в Qt5. По какой-то причине для Qt5 нет документации.

Вы должны попробовать и посмотреть или, по крайней мере, взять выбор в источниках.