BlinCT
6 января 2019 г. 23:06

Размер шрифта через QFont

с++

Всем привет.
Сталкнулся с такой непоняткой. Рисую через QPainter текст, представляет собою время. И вместо того чтоыб при изменении размера в коде и изменении размера шрифта, у меня текст сползает в сторону.
Не понимаю что происходит. Может кто посодействует пониманию.
На скринах первый это там где я задал 25


А на этом скрине размер задан 19

И сам код

  1. QFont outline_font("times", 19);
  2. QFontMetrics metrics(outline_font);
  3.  
  4. auto time = CircleTimer::time().toString();
  5. auto x = (width() - (static_cast<double>(metrics.horizontalAdvance(time))) / 2) / 2;
  6. auto y = (height() + (metrics.height() / 2)) / 2;
  7.  
  8. painter->setPen("black");
  9. painter->drawText(x, y , time);

Благодарю заранее.

2

Вам это нравится? Поделитесь в социальных сетях!

4
Evgenii Legotckoi
  • 7 января 2019 г. 14:35

Привет.

Вообще у QFontMetrics нужно бы использовать метод width(), чтобы забрать ширину текста

  1. QFontMetrics(outline_font).width(CircleTimer::time().toString());

И ещё один момент. а ты уверен, что в QFont находится правильный шрифт?
Раз уж на то пошло, то его нужно брать из QPainter, а не придумывать самому.

  1. QFontMetrics(painter->font()).width(CircleTimer::time().toString());
    BlinCT
    • 7 января 2019 г. 14:42

    По поводу ширины текста, я это и делаю через metrics.horizontalAdvance(time).
    Шрифт я взял из примера в оф описании на сайте. Так что как понимаю должен быть шрифт правильный.

      Evgenii Legotckoi
      • 7 января 2019 г. 14:52

      Так что как понимаю должен быть шрифт правильный.

      да хрен то там. Если у тебя ОС Ubuntu, то и шрифт будет в приложении Ubuntu, с какого перепуга там будет "times"?

        Evgenii Legotckoi
        • 7 января 2019 г. 14:54

        Шрифт нужно брать из painter,

        1. painter->font()

        либо предварительно устанавливать его в painter

        1. QFont outline_font("times", 19);
        2. painter->setFont(outline_font);
        3. painter->setPen("black");
        4. painter->drawText(x, y , time);

          Комментарии

          Только авторизованные пользователи могут публиковать комментарии.
          Пожалуйста, авторизуйтесь или зарегистрируйтесь