QFontMetrics boundingRect

У меня проблемы с функцией QFontMetrics ‘boundingRect’, она не возвращает правильные результаты.

    mfntArial = QFont("Arial", 12, QFont::Bold);
QFontMetrics objMetrics(mfntArial);
QRect rctLine = objMetrics.boundingRect("LOS");

В отладчике rctLine содержит:

    x1 : 1
x2 : 26
y1 : -16
y2 : 4

Это очень сбивает с толку, я ожидаю, что x1 и y1 будут равны 0, так как не пройдена контрольная позиция, и я ожидаю, что x2 и y2 будут положительными.

Возвращенный прямоугольник неверен, и если я использую его с drawText и выравниванием, то часть строки будет отсутствовать на дисплее.

Я знаю, что есть другие сообщения о том, как эта функция возвращает неправильные результаты, и я смотрел на них, они не помогли мне.

Я использую Qt5.6 на RedHat 7.2.

Я также попробовал:

    QRect rctParent = pobjParent->geometry();
QRect rctLine = objMetrics.boundingRect(rctParent, intAlign, "LOS");

Где pobjParent — родительский виджет, а rctParent содержит:

    x1 : 8
x2 : 289
y1 : 24
y2 : 447

intAlign содержит 33 (слева вверху)

В этом случае rctLine возвращает:

    x1 : 8
x2 : 35
y1 : 24
y2 : 44

Но ограничивающий прямоугольник все еще мал, и часть ‘S’ отсутствует при визуализации.

Официальная документация Qt по QFontMetrics

1

Решение

Я исправил свою проблему, рассчитав ширину одного из самых широких символов «М».

    QRect rctCapM = objMetrics.boundingRect(rctParent, intAlign, "M");

Затем я использую это как типичный и затем вычисляю требуемый ограничивающий прямоугольник для других строк:

    QRect rctBounds(0, 0, rctCapM.width() * strLine.length(), rctCapM.height());

Где ‘strLine’ содержит строку для отображения и вычисления границ, это работает для меня.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]