Всем привет. Нужна помощь.
В ресурсы разрабатываемого приложения внедряю шрифты (OTF). Не устанавливаю в операционке, - это важно. Шрифты одного семейства (
font family). Отличаются тем, что содержат начертания символов в различном стиле/весе (
font weight) - обычное начертание (
Normal / regular / roman / plain) и "облегченный" вариант (
Light). Хочу использовать эти два стиля.
Добавляю шрифты в базу данных.
QFontDatabase::addApplicationFont(":/res/font/HelveticaNeueCyr-Light.otf");
QFontDatabase::addApplicationFont(":/res/font/HelveticaNeueCyr-Roman.otf");
Они нормально устанавливаются. Каждому из них присваивается свой идентификатор.
Если добавлять только один шрифт с "облегченным" начертанием и посмотреть его стили
QFontDatabase fdb;
QStringList list = fdb.styles("HelveticaNeueCyr");
то все хорошо. Присутствует стиль
Light.
Проблема заключается в том, что при добавлении двух шрифтов одновременно, "облегченный" стиль пропадает. Понять, почему это происходит, пока не могу.
Ходил в отладчике по исходникам Qt (под windows). С точки зрения API - все вызывается по науке (msdn).
Сначала
Потом
И вот в
*PTEXTMETRIC p;
p->tmWeight
лежит значение, характеризующее только обычный стиль начертания.
Интуитивно чувствую, что проблема, наверное, в том, что используется какая-нибудь карта/хэш/мультисэт, в которой ключами являются имена семейств шрифтов. При добавлении в карту проходит все хорошо, а вот при получении значений (списка поддерживаемых стилей) - находится первое (?) и возвращается. Но это предположение, - не верю я в такую криворукость.
update 1Набросал демку (см. внизу testFont.zip).
Два списка: шрифты и их стили. Выбираем шрифт, отображаются доступные ему стили.
Два чекбокса. Первый добавляет шрифт "Light", второй - обычный.
Сценарий тестаЖмем Refresh. Загружается список шрифтов.
Убеждаемся, что HelveticaNeueCyr отсутствует.
Жмем первый чек (Light). В списке появляется HelveticaNeueCyr.
Клик по HelveticaNeueCyr в первом списке. Во втором отображаются доступные ему стили.
Жмем второй чек (Roman). .... По идее список стилей должен расшириться.... Но нет. Происходит замена "Light" на "Normal".
....куча вопросов...
update 2Если установить эти два шрифта, то получается все совсем интересно.
В списке шрифтов естественно уже будет наш шрифт. При получении списка его стилей вижу абсолютно верный набор. Но... Использовать все варианты не удается. Начертание кириллических символов не изменяется.
update 3Проверил на openSuse...... все работает. Причем так как надо. ....
..все понимаю... но нужна она ...нужна Винда.
Написал много. Надеюсь, что мой пост дочитан вами до конца. И еще очень надеюсь на вашу помощь.