在Qt中测量文本宽度

59
使用Qt框架,如何测量使用给定字体/样式呈现的文本的宽度(以像素为单位)?
4个回答

82
您可以使用QFontMetrics类 - 可以查看width()方法,该方法可以给出给定QString的宽度。
QFont myFont(fontName, fontSize);;
QString str("I wonder how wide this is?");

QFontMetrics fm(myFont);
int width=fm.width(str);

22

自Qt 5.11版本起,您必须使用QFontMetrics类的horizontalAdvance()方法,而不是width()方法。 width()现已过时。

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

QFontMetrics fm(myFont);
int width=fm.horizontalAdvance(str);

17

在 paintEvent 中

QString text("text");
QFontMetrics fm = painter.fontMetrics();
int width = fm.width(text);

7
作为对@Paul回答的补充,我发现在绘制文本(在Linux上使用Qt4.8)时,实际绘制文本的宽度与QFontMetrics :: boundingRect返回的宽度经常不符。 在我的情况下,绘制的文本通常太宽了。
如果您想在绘制文本时获得准确的结果(例如为了确定您绘制的文本周围的矩形的尺寸),最好直接使用QPainter提供的boundingRect函数。

在使用Qt 5.5.1的OS X上遇到了同样的情况,高度不准确。我使用了一个独立的QFontMetrics,但需要在绘图器上设置字体并直接使用其boundingRect来准确测量文本。 - kainjow

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接