Даже не предполагал, что в Linux Mint столкнусь с такой проблемой. Команда разработчиков этого дистрибутива вылизывает настройки интерфейса в Ubuntu до такой степени, что, вне зависимости от того, какая gui-библиотека была использована при написании программы, эта программа выглядит практически также, как и GTK-приложения. В результате, графический интерфейс Linux Mint выглядит взрослее, чем интерфейс его родителя. Однако же, я всё-таки напоролся на проблему со шрифтами.

Вот как она выглядела:

qtconfig broken fonts

Как видно на снимке, кириллические символы отображаются каким-то шрифтом с засечками с невероятным расстоянием между символами, в то время, как с латинскими символами всё в порядке — они отрисовываются тем шрифтом, который задан в настройках. Проблема возникла после того, как я поставил дополнительные ttf-шрифты из стандартного репозитория. Я не спроста упоминал GTK в начале заметки, т.к. эта ситуация наблюдается в QT-приложениях, например qtconfig-qt4 (на снимке вверху), Gwenview и Skype. Приложения же, использующие GTK для отрисовки интерфейса, отображаются при этом нормально. Собственно настройки шрифтов для QT регулируются в qtconfig. Однако, это не касается случаев, когда на закладке “Внешний вид” выбрана тема GTK+, либо пользовательсткие настройки, как это было у меня. Поскольку это Linux Mint, очевидно, что под “Пользовательскими настройками” имеется в виду та же тема GTK+, только, может быть, “подкрученная”. Короче, в такой ситуации QT использует настройки шрифтов из настроек GTK. Однако в них я ничего не менял, шрифт там оставался стандартный — Sans — который, разумеется не имеет засечек :).

gtk font settings before

Скорее всего, QT в каких-то своих умолчальных настройках, которые недоступны либо труднодоступны пользователю, имеет умолчальное же семейство шрифтов. Это семейство шрифтов и используется при отрисовке gui. В моем, а возможно и во всех случаях, это оказалось семейство sans-serif — без засечек. Я предполагаю, что после установки дополнительных шрифтов, QT каким-то непонятным образом не нашла шрифт Sans (а может никогда раньше и не находила) и использовала первый попавшийся sans-serif шрифт. Который, в свою очередь, оказался без поддержки кириллицы; что привело к откату QT на первый попавшийся шрифт с поддержкой кириллицы. Смахивает, кстати, на Georgia. Но установить, что это за шрифт, конечно, трудно. Как и то, какой шрифт без засечек использовался для латинских символов. Потому что много шрифтов, которые называются по разному, но отличаются один от другого в незначительных деталях.

В общем, я подыскал подходящий шрифт без засечек, который поддерживает кириллицу, и qt нормально его находит. Выставил его в настройках GTK и перезапустил qt-приложение.

gtk font settings after

Заработало нормально :)

qtconfig result

Тем не менее, этот обходной путь не решил проблему, а лишь скрыл её. Если кто-нибудь знает, как заставить QT отрисовывать нормально gui с тем шрифтом, который задан в GTK, отпишитесь, пожалуйста :).