Измерение ширины текста в Qt - PullRequest
47 голосов
/ 27 августа 2009

Как измерить ширину (в пикселях) фрагмента текста с заданным шрифтом / стилем в Qt Framework?

Ответы [ 4 ]

74 голосов
/ 27 августа 2009

Вы можете использовать QFontMetrics class - см. Метод width () , который может дать вам ширину заданной QString.

QFont myFont(fontName, fontSize);;
QString str("I wonder how wide this is?");

QFontMetrics fm(myFont);
int width=fm.width(str);
12 голосов
/ 30 июня 2014

В paintEvent

QString text("text");
QFontMetrics fm = painter.fontMetrics();
int width = fm.width(text);
6 голосов
/ 17 сентября 2014

В дополнение к ответу @Paul я обнаружил, что при рисовании текста (Qt4.8 в linux) ширина фактически нарисованного текста по сравнению с шириной, которую возвращает QFontMetrics::boundingRect, часто отключается. В моих случаях картина часто была слишком широкой.

Если вы хотите получить точные результаты при рисовании текста (например, для размеров прямоугольников, которые вы рисуете вокруг текста), лучше использовать функции boundingRect, предоставляемые непосредственно QPainter.

0 голосов
/ 11 июня 2019

Начиная с Qt 5.11, вы должны использовать horizontalAdvance() метод класса QFontMetrics вместо width(). width() устарел.

QFont myFont(fontName, fontSize);;
QString str("I wonder how wide this is?");

QFontMetrics fm(myFont);
int width=fm.horizontalAdvance(str);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...