Using the Qt framework, how do I measure the width (in pixels) of a piece of text rendered with a given font/style?
4 Answers
76
votes
You can use QFontMetrics class - see the width() method which can give you the width of a given QString.
QFont myFont(fontName, fontSize);;
QString str("I wonder how wide this is?");
QFontMetrics fm(myFont);
int width=fm.width(str);
13
votes
13
votes
Since Qt 5.11 you must use horizontalAdvance()
method of QFontMetrics
class instead of width()
. width()
is now obselete.
QFont myFont(fontName, fontSize);;
QString str("I wonder how wide this is?");
QFontMetrics fm(myFont);
int width=fm.horizontalAdvance(str);
6
votes
As an addition to the answer by @Paul, I found that when painting text (Qt4.8 on linux), the width of an actually painted text compared to the width of what QFontMetrics::boundingRect
returns is often off. In my cases, the painting was often too wide.
If you want accurate results when painting text (for example to dimension rectangles you draw around text), better use the boundingRect
functions provided directly by QPainter
.