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

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