Почему QRect :: moveCenter не работает должным образом?

0

Это решение, над которым я работаю для этого другого вопроса. Текст должен быть горизонтально и вертикально центрирован в данном rect.

void
draw_text_label (QPainter & p, const QString & text, QRectF rect)
{
    // Work in unscaled coordinates (see linked question if you're curious)

    p .save ();
    assert (false == p .transform () .isRotating ());
    rect = p .transform () .mapRect (rect);
    p .resetTransform ();

    // Scale to fit

    set_font_size (p, font_size_to_fit (p, text, rect));

    QRectF text_rect = p .fontMetrics () .tightBoundingRect (text);

    ////////////////////////////
    // this line ALMOST works //
    ////////////////////////////

    text_rect .moveCenter (rect .center ());

    // Draw

    p .translate (text_rect .left (), text_rect .bottom ());

    p .setPen (Qt :: red);
    p .drawText (0, 0, text);
    p .drawRect (0, 0, text_rect .width (), -text_rect .height ());

    p .restore ();
}

Что вызвано

void
draw_thingy (QRectF rect)
{
    p .setPen (Qt :: white);
    p .drawRect (rect);

    float m = MARGIN * 0.5;
    draw_text_label (thingy_text, rect .adjusted (m,m,-2*m,-2*m));
}

Таким образом, данный rect обозначается белым цветом, text_rect указывается красным цветом.

Изображение 174551

Как вы можете видеть на этом тестовом изображении (ссылка в случае, когда встроенное изображение умирает), красный прямоугольник не совсем центрирован. Это больше, чем ошибка округления.

Почему это происходит?

Теги:
qt

1 ответ

0

Используйте значение выравнивания Qt::AlignCenter в DrawText чтобы DrawText текст в прямоугольнике. Никаких прямых вычислений не требуется.

  • 0
    Кажется, это дает тот же результат.
  • 0
    Может иметь какое-то отношение к преобразованию, которое вы применяете к художнику. Попробуйте закомментировать весь код преобразования

Ещё вопросы

Сообщество Overcoder
Наверх
Меню