以Qt测量文本宽度

Ton*_*ony 47 c++ qt text

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

Pau*_*xon 74

您可以使用QFontMetrics类 - 请参阅width()方法,该方法可以为您提供给定QString的宽度.

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

QFontMetrics fm(myFont);
int width=fm.width(str);
Run Code Online (Sandbox Code Playgroud)


Seb*_*247 13

从 Qt 5.11 开始,您必须使用类的horizontalAdvance()方法QFontMetrics而不是width(). width()现在已经过时了。

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

QFontMetrics fm(myFont);
int width=fm.horizontalAdvance(str);
Run Code Online (Sandbox Code Playgroud)


Ale*_*der 12

在paintEvent中

QString text("text");
QFontMetrics fm = painter.fontMetrics();
int width = fm.width(text);
Run Code Online (Sandbox Code Playgroud)


Joh*_*itb 6

作为@Paul的答案的补充,我发现在绘制文本时(Linux上的Qt4.8),实际绘制的文本的宽度与QFontMetrics::boundingRect返回的宽度相比通常是关闭的.在我的情况下,这幅画往往太宽.

如果在绘制文本时想要准确的结果(例如,在文本周围绘制尺寸矩形),最好使用boundingRect直接提供的函数QPainter.