Используя структуру Qt, как я могу измерить ширину (в пикселях) фрагмента текста, созданного с заданным шрифтом/стилем?
Измерение ширины текста в Qt
Ответ 1
Вы можете использовать QFontMetrics класс - см. width(), который может дать вам ширину заданного QString.
QFont myFont(fontName, fontSize);;
QString str("I wonder how wide this is?");
QFontMetrics fm(myFont);
int width=fm.width(str);
Ответ 2
В paintEvent
QString text("text");
QFontMetrics fm = painter.fontMetrics();
int width = fm.width(text);
Ответ 3
В качестве дополнения к ответу @Paul я обнаружил, что при рисовании текста (Qt4.8 на linux) ширина фактически окрашенного текста по сравнению с шириной возврата QFontMetrics::boundingRect
часто отключается. В моих случаях картина часто была слишком широкой.
Если вы хотите получить точные результаты при рисовании текста (например, для размерных прямоугольников, которые вы рисуете вокруг текста), лучше используйте функции boundingRect
, предоставляемые непосредственно QPainter
.
Ответ 4
Начиная с Qt 5.11 вместо width()
вы должны использовать метод horizontalAdvance()
класса QFontMetrics
. width()
теперь устарела.
QFont myFont(fontName, fontSize);;
QString str("I wonder how wide this is?");
QFontMetrics fm(myFont);
int width=fm.horizontalAdvance(str);