web-dev-qa-db-ja.com

Qtでのテキスト幅の測定

Qtフレームワークを使用して、特定のフォント/スタイルでレンダリングされたテキストの幅(ピクセル単位)をどのように測定しますか?

47
Tony the Pony

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);
1
Sebastien247

QFontMetrics クラスを使用できます。指定されたQStringの幅を提供できる width() メソッドを参照してください。

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

QFontMetrics fm(myFont);
int width=fm.width(str);
74
Paul Dixon

PaintEvent内

QString text("text");
QFontMetrics fm = Painter.fontMetrics();
int width = fm.width(text);
12
Alexander

@Paulの回答に加えて、テキストをペイントするとき(LinuxのQt4.8)、実際にペイントされたテキストの幅が、QFontMetrics::boundingRectが返すものの幅と比較して、しばしばずれていることがわかりました。私の場合、絵はしばしば広すぎました。

テキストをペイントするときに正確な結果が必要な場合(たとえば、テキストの周りに描画する長方形の寸法を記入する場合)、boundingRectから直接提供されるQPainter関数を使用することをお勧めします。