【发布时间】:2010-11-23 04:16:15
【问题描述】:
使用 Qt 框架,我如何测量以给定字体/样式呈现的一段文本的宽度(以像素为单位)?
【问题讨论】:
使用 Qt 框架,我如何测量以给定字体/样式呈现的一段文本的宽度(以像素为单位)?
【问题讨论】:
您可以使用 QFontMetrics 类 - 请参阅 width() 方法,它可以为您提供给定 QString 的宽度。
QFont myFont(fontName, fontSize);;
QString str("I wonder how wide this is?");
QFontMetrics fm(myFont);
int width=fm.width(str);
【讨论】:
在paintEvent中
QString text("text");
QFontMetrics fm = painter.fontMetrics();
int width = fm.width(text);
【讨论】:
作为@Paul 回答的补充,我发现在绘制文本时(Linux 上的 Qt4.8),实际绘制的文本的宽度与 QFontMetrics::boundingRect 返回的宽度相比通常是关闭的。在我的情况下,这幅画通常太宽了。
如果您希望在绘制文本时获得准确的结果(例如为围绕文本绘制的矩形标注尺寸),最好使用由QPainter 直接提供的boundingRect 函数。
【讨论】:
从 Qt 5.11 开始,您必须使用 QFontMetrics 类的 horizontalAdvance() 方法而不是 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);
【讨论】: