Используя структуру 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);