Qtフレームワークを使用して、特定のフォント/スタイルでレンダリングされたテキストの幅(ピクセル単位)をどのように測定しますか?
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);
QFontMetrics クラスを使用できます。指定されたQStringの幅を提供できる width() メソッドを参照してください。
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
が返すものの幅と比較して、しばしばずれていることがわかりました。私の場合、絵はしばしば広すぎました。
テキストをペイントするときに正確な結果が必要な場合(たとえば、テキストの周りに描画する長方形の寸法を記入する場合)、boundingRect
から直接提供されるQPainter
関数を使用することをお勧めします。