QFontMetricsF Class
QFontMetricsF クラスは、フォントのメトリクス情報を提供します。詳細...
| ヘッダー: | #include <QFontMetricsF> |
| CMake: | find_package(Qt6 REQUIRED COMPONENTS Gui) target_link_libraries(mytarget PRIVATE Qt6::Gui) |
| qmake: | QT += gui |
- 継承されたメンバーを含む、すべてのメンバーの一覧
- QFontMetricsF は、描画クラスおよび暗黙的に共有されるクラスの一部です。
注:このクラスのすべての関数は再入可能です。
パブリック関数
| QFontMetricsF(const QFont &font) | |
| QFontMetricsF(const QFontMetrics &fontMetrics) | |
| QFontMetricsF(const QFont &font, const QPaintDevice *paintdevice) | |
| QFontMetricsF(const QFontMetricsF &fm) | |
| QFontMetricsF(QFontMetricsF &&) | |
| ~QFontMetricsF() | |
| qreal | ascent() const |
| qreal | averageCharWidth() const |
| QRectF | boundingRect(QChar ch) const |
| QRectF | boundingRect(const QString &text) const |
(since 6.3) QRectF | boundingRect(const QString &text, const QTextOption &option) const |
| QRectF | boundingRect(const QRectF &rect, int flags, const QString &text, int tabStops = 0, int *tabArray = nullptr) const |
| qreal | capHeight() const |
| qreal | descent() const |
| QString | elidedText(const QString &text, Qt::TextElideMode mode, qreal width, int flags = 0) const |
| qreal | fontDpi() const |
| qreal | height() const |
(since 6.3) qreal | horizontalAdvance(const QString &text, const QTextOption &option) const |
| qreal | horizontalAdvance(const QString &text, int length = -1) const |
| qreal | horizontalAdvance(QChar ch) const |
| bool | inFont(QChar ch) const |
| bool | inFontUcs4(uint ch) const |
| qreal | leading() const |
| qreal | leftBearing(QChar ch) const |
| qreal | lineSpacing() const |
| qreal | lineWidth() const |
| qreal | maxWidth() const |
| qreal | minLeftBearing() const |
| qreal | minRightBearing() const |
| qreal | overlinePos() const |
| qreal | rightBearing(QChar ch) const |
| QSizeF | size(int flags, const QString &text, int tabStops = 0, int *tabArray = nullptr) const |
| qreal | strikeOutPos() const |
| void | swap(QFontMetricsF &other) |
| QRectF | tightBoundingRect(const QString &text) const |
(since 6.3) QRectF | tightBoundingRect(const QString &text, const QTextOption &option) const |
| qreal | underlinePos() const |
| qreal | xHeight() const |
| bool | operator!=(const QFontMetricsF &other) const |
| QFontMetricsF & | operator=(QFontMetricsF &&other) |
| QFontMetricsF & | operator=(const QFontMetrics &other) |
| QFontMetricsF & | operator=(const QFontMetricsF &fm) |
| bool | operator==(const QFontMetricsF &other) const |
詳細な説明
QFontMetricsF 関数は、指定されたフォントの文字および文字列のサイズを計算します。既存のQFont を使用して QFontMetricsF オブジェクトを構築し、そのフォントのメトリックを取得することができます。後でフォントが変更されても、フォント メトリック オブジェクトは更新されません。
一度作成されると、このオブジェクトは、フォント、その文字、およびそのフォントでレンダリングされた文字列の個々のメトリクスにアクセスするための関数を提供します。
フォントに対して操作を行う関数はいくつかあります。ascent()、descent()、height()、leading()、およびlineSpacing() は、フォントの基本的なサイズプロパティを返します。underlinePos()、overlinePos()、strikeOutPos()、およびlineWidth() 関数は、文字の下線、上線、または取り消し線を引くラインのプロパティを返します。これらの関数はすべて高速です。
また、フォント内のグリフの集合に対して操作を行う関数もいくつかあります:minLeftBearing()、minRightBearing()、およびmaxWidth() です。これらは必然的に処理が遅いため、可能であれば使用を避けることをお勧めします。
各文字について、horizontalAdvance()、leftBearing()、rightBearing() を取得でき、inFont() を使用してその文字がフォントに含まれているかどうかを確認できます。また、文字を文字列として扱い、文字列関数を適用することも可能です。
文字列関数には、文字列の幅をピクセル単位(またはプリンタの場合はポイント単位)で返す `horizontalAdvance()`、レンダリングされた文字列を収めるのに十分な大きさの矩形を返す `boundingRect()`、およびその矩形のサイズを返す `size()` などがあります。
QFontMetrics には、文字列の境界を計算するための2つの異なる関数があり、それぞれに複数のオーバーロードがあります:boundingRect() とtightBoundingRect() です。正確な境界矩形が必要な場合は、tightBoundingRect() を使用することを推奨します。この関数は各グリフを個別に測定し、レンダリングされたテキストにぴったりと沿う境界矩形を返します。 プラットフォームによっては、boundingRect() 関数は近似値の境界を返す場合がありますが、計算負荷は低くなります。
例:
QFont font("times", 24);
QFontMetricsF fm(font);
qreal pixelsWide = fm.horizontalAdvance("What's the advance width of this text?");
qreal pixelsHigh = fm.height();関連項目: QFont 、QFontInfo 、およびQFontDatabase 。
メンバ関数のドキュメント
[explicit] QFontMetricsF::QFontMetricsF(const QFont &font)
font 用のフォントメトリクスオブジェクトを作成します。
このフォントメトリクスは、font の作成に使用されたペイントデバイスと互換性があります。
フォントメトリクスオブジェクトは、作成時にコンストラクタで渡されたフォントに関する情報を保持しており、後でフォントの属性が変更されても更新されません。
特定のペイントデバイスと互換性のあるフォントメトリクスを取得するには、QFontMetricsF(constQFont &,QPaintDevice *) を使用します。
QFontMetricsF::QFontMetricsF(const QFontMetrics &fontMetrics)
指定されたfontMetrics オブジェクトから、浮動小数点精度を持つフォントメトリクスオブジェクトを作成します。
QFontMetricsF::QFontMetricsF(const QFont &font, const QPaintDevice *paintdevice)
font およびpaintdevice 用のフォントメトリクスオブジェクトを構築します。
フォントメトリクスは、渡されたペイントデバイスと互換性があります。paintdevice がnullptr の場合、メトリクスは画面互換となります。つまり、QPicture やQPrinter ではなく、widgets やpixmaps でテキストを描画する際に得られるメトリクスとなります。
フォントメトリクスオブジェクトは、作成時にコンストラクタで渡されたフォントに関する情報を保持しており、後でフォントの属性が変更されても更新されることはありません。
QFontMetricsF::QFontMetricsF(const QFontMetricsF &fm)
fm のコピーを作成します。
[constexpr noexcept default] QFontMetricsF::QFontMetricsF(QFontMetricsF &&)
QFontMetricsF のインスタンスをMoveコンストラクタで生成します。
[noexcept] QFontMetricsF::~QFontMetricsF()
フォントメトリクスオブジェクトを破棄し、割り当てられたすべてのリソースを解放します。
qreal QFontMetricsF::ascent() const
フォントのアセントを返します。
フォントのアセントとは、ベースラインから文字が伸びる最高位置までの距離のことです。実際には、フォントデザイナーによっては、例えば1つの文字の上に複数のアクセントを配置する場合や、特定の文字に対応させる場合など、このルールから外れることがあります。そのため、この値が小さすぎる場合もあり得ます(ただし、稀です)。
descent()も参照してください 。
qreal QFontMetricsF::averageCharWidth() const
そのフォントに含まれるグリフの平均幅を返します。
QRectF QFontMetricsF::boundingRect(QChar ch) const
文字「ch 」の、ベースラインの最左端を基準とした境界矩形を返します。
なお、囲み矩形は(0, 0)の左側にまで及ぶ場合がある(例:イタリック体のフォントなど)こと、また、テキストの出力が囲み矩形内のすべてのピクセルを覆う場合があることに注意してください。
この矩形は通常、ベースラインの上下両方に及ぶことに注意してください。
horizontalAdvance()も参照してください 。
QRectF QFontMetricsF::boundingRect(const QString &text) const
text で指定された文字列に含まれる文字の境界矩形を返します。この境界矩形は、常に、テキストが (0, 0) に描画された場合に覆うピクセルの範囲を少なくとも包含します。
なお、イタリック体のフォントの場合など、境界矩形が (0, 0) の左側にまで及ぶ場合があること、また、返される矩形の幅がhorizontalAdvance() メソッドが返す値とは異なる場合があることに注意してください。
文字列の進み幅を知りたい場合(一連の文字列を隣り合わせに配置する場合など)、代わりにhorizontalAdvance() を使用してください。
改行文字は、改行としてではなく、通常の文字として処理されます。
境界矩形の高さは、height() が返す値以上になります。
horizontalAdvance()、height()、およびQPainter::boundingRect()も参照してください 。
[since 6.3] QRectF QFontMetricsF::boundingRect(const QString &text, const QTextOption &option) const
text で指定された文字列内の文字について、option を使用して配置された際の境界矩形を返します。この境界矩形は、常に、テキストが (0, 0) に描画された場合に覆うピクセルの範囲を少なくとも包含します。
なお、イタリック体のフォントなどによっては、境界矩形が (0, 0) の左側にまで及ぶ場合があり、また、返される矩形の幅はhorizontalAdvance() メソッドが返す値とは異なる場合があることに注意してください。
文字列のアドバンス幅を知りたい場合(一連の文字列を隣り合わせに配置するためなど)は、代わりにhorizontalAdvance() を使用してください。
改行文字は、改行としてではなく、通常の文字として処理されます。
バウンディング矩形の高さは、height() が返す値以上になります。
この関数は Qt 6.3 で導入されました。
horizontalAdvance()、height()、およびQPainter::boundingRect()も参照してください 。
QRectF QFontMetricsF::boundingRect(const QRectF &rect, int flags, const QString &text, int tabStops = 0, int *tabArray = nullptr) const
指定されたtext 内の文字の境界矩形を返します。これは、rect で指定された境界矩形に制限されて描画された場合に、テキストが覆うピクセルの集合です。rect がnullptr オブジェクトへの参照である場合(例えば、デフォルト構築されたQRectF を渡す場合など)、境界矩形はそのサイズに制限されません。
flags 引数は、以下のフラグのビット単位のOR演算の結果です:
- Qt::AlignLeft 左端に揃えます。ただし、アラビア語とヘブライ語の場合は右端に揃えます。
- Qt::AlignRight 右端に揃えます。ただし、アラビア語およびヘブライ語の場合は左端に揃えます。
- Qt::AlignJustify テキストを両端揃えにします。
- Qt::AlignHCenter 水平方向に中央揃えにします。
- Qt::AlignTop 上端に揃えます。
- Qt::AlignBottom 下端に揃えます。
- Qt::AlignVCenter 縦方向に中央揃えになります。
- Qt::AlignCenter (==
Qt::AlignHCenter | Qt::AlignVCenter) - Qt::TextSingleLine テキスト内の改行文字を無視します。
- Qt::TextExpandTabs タブを拡張する(以下を参照)
- Qt::TextShowMnemonic 「&x」をx として解釈します。つまり、下線を引きます。
- Qt::TextWordWrap テキストを矩形に合わせて折り返します。
Qt::Horizontal 配置のデフォルトはQt::AlignLeft 、垂直方向の配置のデフォルトはQt::AlignTop です。
水平方向または垂直方向の整列フラグが複数設定されている場合、結果の整列は未定義となります。
これらのフラグは、Qt::AlignmentFlag で定義されています。
Qt::TextExpandTabs がflags に設定されている場合、テキスト内のタブ文字は以下の挙動に従って解釈されます。
- tabArray が null 以外の場合、テキスト内のタブに対するピクセル位置の 0 で終了するシーケンスを指定します。
- tabStops がゼロ以外の場合、これはタブ間隔(ピクセル単位)として使用されます。
なお、境界矩形は(0, 0)の左側にまで及ぶ場合があります(例:イタリック体のフォントなど)。
改行文字は、改行として処理されます。
実際の文字の高さは異なりますが、「Yes」と「yes」の境界矩形の高さは同じです。
この関数が返す境界矩形は、より単純な boundingRect() 関数によって計算されるものよりも多少大きくなります。この関数は、複数行のテキストを正しく揃えるために必要な、maximum left およびright フォントベアリングを使用します。また、高さの計算には、個々の文字の高さではなく、fontHeight() およびlineSpacing() が使用されます。
これはオーバーロードされた関数です。
horizontalAdvance()、QPainter::boundingRect()、およびQt::Alignmentも参照してください 。
qreal QFontMetricsF::capHeight() const
フォントのキャップハイトを返します。
フォントのキャップハイトとは、ベースラインから大文字の上端までの高さのことです。具体的には、HやIのような平らな大文字の高さを指し、Oのような丸みを帯びた文字や、Aのような先端が尖った文字とは対照的です。後者の2つは、オーバーシュートが発生する可能性があります。
ascent()も参照してください 。
qreal QFontMetricsF::descent() const
フォントのディセントを返します。
ディセントとは、ベースラインから文字が伸びる最下点までの距離のことです(Xでは1ピクセルが加算されるため、これとは異なります)。実際には、特定の文字に対応させるためなどに、このルールに従わないフォントデザイナーもおり、この値が小さすぎる場合(まれですが)もあります。
ascent()も参照してください 。
QString QFontMetricsF::elidedText(const QString &text, Qt::TextElideMode mode, qreal width, int flags = 0) const
文字列 `text ` の幅が `width` よりも広い場合、その文字列の省略版(つまり、「...」が含まれる文字列)を返します。それ以外の場合は、元の文字列を返します。
mode パラメータは、テキストを左側(例: "...tech")、中央(例: "Tr...ch")、または右側(例: "Trol...")で省略するかを指定します。
width は、文字単位ではなくピクセル単位で指定されます。
flags 引数はオプションであり、現在、値としてQt::TextShowMnemonic のみをサポートしています。
省略記号は `layoutdirection` の後に続きます。たとえば、`mode ` が `Qt::ElideLeft` の場合、右から左へのレイアウトではテキストの右側に、`mode ` が `Qt::ElideRight` の場合、テキストの左側に表示されます。
qreal QFontMetricsF::fontDpi() const
フォントのDPIを返します。
qreal QFontMetricsF::height() const
フォントの高さを返します。
これは常にascent() +descent() に等しくなります。
leading() およびlineSpacing()も参照してください 。
[since 6.3] qreal QFontMetricsF::horizontalAdvance(const QString &text, const QTextOption &option) const
option を使用してレイアウトされた `text ` の水平方向の進み量をピクセル単位で返します。
この進み量は、text の後に続く文字を描画するのに適切な距離です。
この関数は Qt 6.3 で導入されました。
boundingRect()も参照してください 。
qreal QFontMetricsF::horizontalAdvance(const QString &text, int length = -1) const
text の最初のlength 文字分の水平進め量をピクセル単位で返します。length が負の値(デフォルト)の場合、文字列全体が使用されます。length が大幅に短い場合でも、text の全長が解析されます。
advance は、text の後に続く文字を描画するのに適切な距離です。
boundingRect()も参照してください 。
qreal QFontMetricsF::horizontalAdvance(QChar ch) const

文字「ch 」の水平進み量をピクセル単位で返します。これは、ch の後に続く文字を描画するのに適切な距離です。
一部のメトリクスは右の図に示されています。中央の暗い長方形は、各文字の論理的な horizontalAdvance() を表しています。外側の薄い長方形は、各文字のleftBearing() およびrightBearing() を表しています。 この特定のフォントでは、「f」のベアリングは両方とも負であるのに対し、「o」のベアリングは両方とも正であることに注意してください。
警告:この関数は 、文字列の処理時に発生するグリフの成形やマークの位置決めを考慮できないため、文字列の途中にアラビア文字や非スペース記号が含まれている場合、誤った結果を生成します。対話型のテキストコントロールを実装する際は、代わりに `QTextLayout ` を使用してください。
これはオーバーロードされた関数です。
boundingRect()も参照してください 。
bool QFontMetricsF::inFont(QChar ch) const
文字 `ch ` がそのフォントで有効な文字である場合は `true ` を返し、そうでない場合は `false` を返します。
bool QFontMetricsF::inFontUcs4(uint ch) const
ch で指定された文字が、UCS-4/UTF-32 でエンコードされた状態で、そのフォントの有効な文字である場合は、true を返します。そうでない場合は、false を返します。
qreal QFontMetricsF::leading() const
フォントの行頭間隔を返します。
これは自然な行間です。
height() およびlineSpacing()も参照してください 。
qreal QFontMetricsF::leftBearing(QChar ch) const
フォント内の文字「ch 」の左方位を返します。
左ベアリングとは、文字の最左端のピクセルから、その文字の論理原点までの右方向への距離のことです。この値は、文字のピクセルが論理原点の左側に伸びている場合、負の値となります。
このメトリックに関する図解については、horizontalAdvance() を参照してください。
rightBearing()、minLeftBearing()、およびhorizontalAdvance()も参照してください 。
qreal QFontMetricsF::lineSpacing() const
あるベースラインから次のベースラインまでの距離を返します。
この値は常に、leading() +height() に等しくなります。
height() およびleading()も参照してください 。
qreal QFontMetricsF::lineWidth() const
フォントのポイントサイズに合わせて調整された、下線および取り消し線の幅を返します。
underlinePos()、overlinePos()、およびstrikeOutPos()も参照してください 。
qreal QFontMetricsF::maxWidth() const
そのフォントの中で最も幅の広い文字の幅を返します。
qreal QFontMetricsF::minLeftBearing() const
そのフォントの最小左方位を返します。
これは、フォント内のすべての文字のうち、最も小さいleftBearing (char)です。
フォントのサイズが大きい場合、この関数の実行が非常に遅くなる可能性があることに注意してください。
minRightBearing() およびleftBearing()も参照してください 。
qreal QFontMetricsF::minRightBearing() const
そのフォントの最小の右ベアリングを返します。
これは、フォント内のすべての文字のうち、最も小さい「rightBearing (char)」です。
フォントのサイズが大きい場合、この関数の実行速度が著しく低下する可能性があることに注意してください。
minLeftBearing() およびrightBearing()も参照してください 。
qreal QFontMetricsF::overlinePos() const
ベースラインから、オーバーラインを描画すべき位置までの距離を返します。
underlinePos()、strikeOutPos()、およびlineWidth()も参照してください 。
qreal QFontMetricsF::rightBearing(QChar ch) const
フォント内の文字「ch 」の右方向のベアリングを返します。
右ベアリングとは、文字の最右端のピクセルから、その次の文字の論理原点までの左方向への距離のことです。この値は、文字のピクセルがhorizontalAdvance()の右側に伸びている場合、負の値となります。
このメトリックに関する図解については、horizontalAdvance() を参照してください。
leftBearing()、minRightBearing()、およびhorizontalAdvance()も参照してください 。
QSizeF QFontMetricsF::size(int flags, const QString &text, int tabStops = 0, int *tabArray = nullptr) const
指定されたtext に含まれる文字のサイズをピクセル単位で返します。
flags 引数は、以下のフラグのビット単位のOR演算の結果です。
- Qt::TextSingleLine 改行文字を無視します。
- Qt::TextExpandTabs タブを展開します(後述)。
- Qt::TextShowMnemonic 「&x」をx として解釈します。つまり、下線付きとします。
- Qt::TextWordWrap テキストを矩形に収まるように切り分けます。
これらのフラグは、Qt::TextFlag 列挙型で定義されています。
flags でQt::TextExpandTabs が設定されている場合、テキスト内のタブ文字は以下の挙動に従って解釈されます:
- tabArray がnullでない場合、テキスト内のタブ位置を示す0で終了するピクセル位置のシーケンスを指定します。
- tabStops が null 以外の場合、これはタブの間隔(ピクセル単位)として使用されます。
改行文字は、改行として処理されます。
注:実際の文字の高さは異なるものの、「Yes」と「yes」の境界矩形の高さは同じです。
boundingRect()も参照してください 。
qreal QFontMetricsF::strikeOutPos() const
ベースラインから、ストライクアウトラインを描画すべき位置までの距離を返します。
underlinePos()、overlinePos()、およびlineWidth()も参照してください 。
[noexcept] void QFontMetricsF::swap(QFontMetricsF &other)
このフォントメトリクスインスタンスをother と入れ替えます。この操作は非常に高速で、失敗することはありません。
QRectF QFontMetricsF::tightBoundingRect(const QString &text) const
text で指定された文字列内の文字を囲む、最小限の囲み矩形を返します。この囲み矩形は、常に、テキストが (0, 0) に描画された場合に覆うピクセルの集合を少なくとも含みます。
なお、イタリック体のフォントなどによっては、境界矩形が (0, 0) の左側にまで及ぶ場合があり、また、返される矩形の幅はhorizontalAdvance() メソッドが返す値とは異なる場合があることに注意してください。
文字列のアドバンス幅を知りたい場合(一連の文字列を並べてレイアウトする場合など)は、代わりにhorizontalAdvance() を使用してください。
改行文字は、改行としてではなく、通常の文字として処理されます。
horizontalAdvance()、height()、およびboundingRect()も参照してください 。
[since 6.3] QRectF QFontMetricsF::tightBoundingRect(const QString &text, const QTextOption &option) const
text で指定された文字列内の文字を、option を使用して配置した際の、文字列を囲む最小の矩形を返します。この矩形は、常に、テキストが(0, 0)に描画された場合に覆うピクセルの範囲を少なくともカバーします。
なお、イタリック体のフォントなどによっては、境界矩形が (0, 0) の左側に伸びる場合があり、また、返される矩形の幅はhorizontalAdvance() メソッドが返す値とは異なる場合があることに注意してください。
文字列のアドバンス幅を知りたい場合(一連の文字列を隣り合わせに配置するためなど)は、代わりにhorizontalAdvance() を使用してください。
改行文字は、改行としてではなく、通常の文字として処理されます。
この関数は Qt 6.3 で導入されました。
horizontalAdvance()、height()、およびboundingRect()も参照してください 。
qreal QFontMetricsF::underlinePos() const
ベースラインからアンダースコアを描画すべき位置までの距離を返します。
overlinePos()、strikeOutPos()、およびlineWidth()も参照してください 。
qreal QFontMetricsF::xHeight() const
フォントの「x」の高さを返します。これは多くの場合、文字「x」の高さと同じですが、必ずしもそうとは限りません。
bool QFontMetricsF::operator!=(const QFontMetricsF &other) const
フォントのメトリックがother のフォントメトリックと等しくない場合はtrue を返し、等しい場合はfalse を返します。
operator==()も参照してください 。
[noexcept] QFontMetricsF &QFontMetricsF::operator=(QFontMetricsF &&other)
other をこのQFontMetricsF インスタンスに割り当てます。
QFontMetricsF &QFontMetricsF::operator=(const QFontMetrics &other)
このオブジェクトにother を割り当てます。
QFontMetricsF &QFontMetricsF::operator=(const QFontMetricsF &fm)
このフォントメトリクスオブジェクトに、フォントメトリクスfm を割り当てます。
bool QFontMetricsF::operator==(const QFontMetricsF &other) const
フォントメトリクスが `other ` のフォントメトリクスと等しい場合は `true ` を返し、そうでない場合は `false` を返します。
2つのフォントメトリクスは、同じQFont から構築され、かつそれらが構築されたペイントデバイスが互換性があるとみなされる場合に、等しいとみなされます。
© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.