Писал казуальную игру для Android, столкнулся со следующей проблемой. Надписи, на телефонах с экраном 5" и меньше, выглядят больше задуманного, а на планшетах, выглядят меньше задуманного.


Есть 2 типа надписей QLable и те, которые отрисовываются при помощи QPainter методом drawText.
Базовый размер игрового экрана 960х600, и в зависимости от запускаемого устройства он растягивается или сжимается.

Обратился к документации по классу QFont.
По методу setPixelSize написано следующее (сразу перевод):
Использование этой функции делает шрифт зависимым от устройства. Используйте setPointSize() или setPointSizeF(), что бы установить размер шрифта не зависимым от устройства.

В действительности, по крайней мере для Android устройств, это не правда.
А правда заключается в точности на оборот: setPointSize — зависит от устройства, setPixelSize — не зависит от устройства.

Может я не правильно понимаю смысл выражения — зависит/не зависит от устройства, но использоваине setPixelSize решило мою проблему.

Пишите, как справлялись с подобной проблемой на других ОС.

Комментарии (5)


  1. Zifix
    26.04.2016 14:27
    +7

    Мне кажется, или кто-то перепутал Хабр с Тостером? Почему вы используете QtWidgets в мобильном приложении?


    1. Mihasik1984
      26.04.2016 17:57

      1) Использование QtWidgets в мобильном приложении запрещено?
      2) С чего Вы взяли, что я использую QtWidgets, по QLable?
      3) Я использую QGraphics.


      1. Zifix
        26.04.2016 19:52
        +1

        1) Нет, просто не оправдано, Google вот, например, игру на QML написал.
        2) Да, по QLabel
        3) Не уверен, что разработчики тестируют его под Android, в QML свойство pointSize работает адекватно.

        Но с такими вопросами в любом случае на форум разработчиков, сервис вопросов и ответов, в багтрекер в крайнем случае, но точно не на Хабр.


      1. BlackRaven86
        29.04.2016 19:02

        Виджеты должны работать под Android, но предполагаю, что с ними будет сложнее. Впрочем, возможно вы потом напишете статью на тему использования виджетов под Android, будет интересно :)


  1. BlackRaven86
    29.04.2016 18:55

    Изначально поддержка экранов с высоким разрешением так и задумывалась: шрифт в поинтах и он автоматически масштабируется Qt и/или ОС (при этом, размеры виджетов масштабируешь сам). А шрифт в пикселях — это были абсолютные значения. По опыту скажу, что размеры в поинтах действительно могут как-то странно отображаться.

    Сейчас концепция поменялась :) Все размеры в пикселях и при использовании AA_EnableHighDpiScaling Qt умножает их на необходимый коэффициент. Единственное, не все части Qt это поддерживают, но виджеты и большинство компонентов QtQuick должны работать.