Sur cette page

QFontMetrics Class

La classe QFontMetrics fournit des informations sur les métriques des polices de caractères. Plus d'informations...

En-tête : #include <QFontMetrics>
CMake : find_package(Qt6 REQUIRED COMPONENTS Gui)
target_link_libraries(mytarget PRIVATE Qt6::Gui)
qmake : QT += gui

Note : Toutes les fonctions de cette classe sont réentrantes.

Fonctions publiques

QFontMetrics(const QFont &font)
QFontMetrics(const QFont &font, const QPaintDevice *paintdevice)
QFontMetrics(const QFontMetrics &fm)
~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

Description détaillée

Les fonctions de QFontMetrics calculent la taille des caractères et des chaînes de caractères pour une police donnée. Cette classe est une version de QFontMetricsF basée sur les nombres entiers et arrondit tous les nombres à l'entier le plus proche. Cela signifie que ses résultats seront inexacts pour toute police dont les métriques sont fractionnaires. Dans la plupart des cas, il convient d'utiliser QFontMetricsF.

Il existe trois façons de créer un objet QFontMetrics :

  1. L'appel au constructeur de QFontMetrics avec une adresse QFont crée un objet de métrique de police pour une police compatible avec l'écran, c'est-à-dire que la police ne peut pas être une police d'imprimante. Si la police est modifiée ultérieurement, l'objet font metrics n' est pas mis à jour.

    (Remarque : si vous utilisez une police d'imprimante, les valeurs renvoyées peuvent être inexactes. Les polices d'imprimante n'étant pas toujours accessibles, la police d'écran la plus proche est utilisée si une police d'imprimante est fournie).

  2. QWidget::fontMetrics() renvoie les métriques de la police d'un widget. Ceci est équivalent à QFontMetrics(widget->font()). Si la police du widget est modifiée ultérieurement, l'objet de métriques de police n' est pas mis à jour.
  3. QPainter::fontMetrics() renvoie les métriques de la police actuelle d'un peintre. Si la police du peintre est modifiée ultérieurement, l'objet de métriques de police n'est pas mis à jour.

Une fois créé, l'objet fournit des fonctions permettant d'accéder aux métriques individuelles de la police, de ses caractères et des chaînes de caractères rendues dans la police.

Plusieurs fonctions agissent sur la police : ascent(), descent(), height(), leading() et lineSpacing() renvoient les propriétés de taille de base de la police. Les fonctions underlinePos(), overlinePos(), strikeOutPos() et lineWidth() renvoient les propriétés de la ligne qui souligne, surligne ou biffe les caractères. Ces fonctions sont toutes rapides.

Il existe également des fonctions qui opèrent sur l'ensemble des glyphes de la police : minLeftBearing(), minRightBearing() et maxWidth(). Ces fonctions sont nécessairement lentes, et nous recommandons de les éviter si possible.

Pour chaque caractère, vous pouvez obtenir son horizontalAdvance(), leftBearing(), et rightBearing(), et savoir s'il se trouve dans la police en utilisant inFont(). Vous pouvez également traiter le caractère comme une chaîne de caractères et utiliser les fonctions de chaîne de caractères.

Les fonctions de chaîne comprennent horizontalAdvance(), qui renvoie la largeur d'avance d'une chaîne en pixels (ou en points, pour une imprimante), boundingRect(), qui renvoie un rectangle suffisamment grand pour contenir la chaîne rendue, et size(), qui renvoie la taille de ce rectangle.

Remarque : la largeur de l'avance peut être différente de la largeur du texte rendu. Elle fait référence à la distance entre l'origine de la chaîne et l'endroit où vous ajouteriez des caractères supplémentaires. Étant donné que le texte peut présenter une surépaisseur (dans le cas d'une police italique, par exemple) ou un remplissage entre les caractères, la largeur d'avance peut être plus petite ou plus grande que le rendu réel du texte. C'est ce qu'on appelle l'orientation droite du texte.

Exemple :

QFont font("times", 24);
QFontMetrics fm(font);
int pixelsWide = fm.horizontalAdvance("What's the advance width of this text?");
int pixelsHigh = fm.height();

Voir également QFont, QFontInfo, et QFontDatabase.

Documentation des fonctions membres

[explicit] QFontMetrics::QFontMetrics(const QFont &font)

Construit un objet de métriques de police pour font.

Les métriques de la police seront compatibles avec le dispositif de peinture utilisé pour créer font.

L'objet de métriques de police contient les informations relatives à la police qui est passée dans le constructeur au moment de sa création, et n'est pas mis à jour si les attributs de la police sont modifiés ultérieurement.

Utilisez QFontMetrics(const QFont &, QPaintDevice *) pour obtenir les métriques de police compatibles avec un certain dispositif de peinture.

QFontMetrics::QFontMetrics(const QFont &font, const QPaintDevice *paintdevice)

Construit un objet de métrique de police pour font et paintdevice.

Les métriques de la police seront compatibles avec l'appareil de peinture passé. Si paintdevice est nullptr, les métriques seront compatibles avec l'écran, c'est-à-dire les métriques que vous obtenez si vous utilisez la police pour dessiner du texte sur un widgets ou pixmaps, et non sur un QPicture ou QPrinter.

L'objet "font metrics" contient les informations relatives à la police qui sont passées dans le constructeur au moment de sa création, et n'est pas mis à jour si les attributs de la police sont modifiés ultérieurement.

QFontMetrics::QFontMetrics(const QFontMetrics &fm)

Construit une copie de fm.

[noexcept] QFontMetrics::~QFontMetrics()

Détruit l'objet "font metrics" et libère toutes les ressources allouées.

int QFontMetrics::ascent() const

Renvoie l'ascension de la police.

L'ascension d'une police est la distance entre la ligne de base et la position la plus haute à laquelle les caractères s'étendent. Dans la pratique, certains concepteurs de polices enfreignent cette règle, par exemple lorsqu'ils placent plus d'un accent au sommet d'un caractère, ou pour tenir compte d'un certain caractère, de sorte qu'il est possible (bien que rare) que cette valeur soit trop petite.

Voir également descent().

int QFontMetrics::averageCharWidth() const

Renvoie la largeur moyenne des glyphes de la police.

QRect QFontMetrics::boundingRect(QChar ch) const

Renvoie le rectangle couvert par l'encre si le caractère ch est dessiné à l'origine du système de coordonnées.

Notez que le rectangle de délimitation peut s'étendre à gauche de (0, 0) (par exemple, pour les polices en italique), et que la sortie du texte peut couvrir tous les pixels du rectangle de délimitation. Pour un caractère espace, le rectangle sera généralement vide.

Notez que le rectangle s'étend généralement au-dessus et au-dessous de la ligne de base.

Attention : La largeur du rectangle retourné n'est pas la largeur anticipée du caractère. Utilisez boundingRect(const QString &) ou horizontalAdvance() à la place.

Voir aussi horizontalAdvance().

QRect QFontMetrics::boundingRect(const QString &text) const

Renvoie le rectangle de délimitation des caractères de la chaîne spécifiée par text. Le rectangle englobe toujours au moins l'ensemble des pixels que le texte couvrirait s'il était dessiné à (0, 0).

Notez que le rectangle délimité peut s'étendre à gauche de (0, 0), par exemple pour les polices en italique, et que la largeur du rectangle renvoyé peut être différente de celle renvoyée par la méthode horizontalAdvance().

Si vous souhaitez connaître la largeur anticipée de la chaîne (pour disposer un ensemble de chaînes les unes à côté des autres), utilisez plutôt horizontalAdvance().

Les caractères de retour à la ligne sont traités comme des caractères normaux, et non comme des retours à la ligne.

La hauteur du rectangle de délimitation est au moins aussi grande que la valeur renvoyée par height().

Voir aussi horizontalAdvance(), height(), QPainter::boundingRect() et tightBoundingRect().

[since 6.3] QRect QFontMetrics::boundingRect(const QString &text, const QTextOption &option) const

Renvoie le rectangle de délimitation des caractères de la chaîne spécifiée par text, tracé à l'aide de option. Le rectangle englobe toujours au moins l'ensemble des pixels que le texte couvrirait s'il était dessiné à (0, 0).

Notez que le rectangle délimité peut s'étendre à gauche de (0, 0), par exemple pour les polices en italique, et que la largeur du rectangle renvoyé peut être différente de celle renvoyée par la méthode horizontalAdvance().

Si vous souhaitez connaître la largeur anticipée de la chaîne (pour disposer un ensemble de chaînes les unes à côté des autres), utilisez plutôt horizontalAdvance().

Les caractères de retour à la ligne sont traités comme des caractères normaux, et non comme des retours à la ligne.

La hauteur du rectangle de délimitation est au moins aussi grande que la valeur renvoyée par height().

Cette fonction a été introduite dans Qt 6.3.

Voir aussi horizontalAdvance(), height(), QPainter::boundingRect() et tightBoundingRect().

QRect QFontMetrics::boundingRect(const QRect &rect, int flags, const QString &text, int tabStops = 0, int *tabArray = nullptr) const

Renvoie le rectangle de délimitation des caractères de la chaîne spécifiée par text, c'est-à-dire l'ensemble des pixels que le texte couvrirait s'il était dessiné à (0, 0). Le dessin, et donc le rectangle de délimitation, est contraint au rectangle rect.

L'argument flags est le OU binaire des drapeaux suivants :

Qt::Horizontal L'alignement horizontal a pour valeur par défaut Qt::AlignLeft et l'alignement vertical a pour valeur par défaut Qt::AlignTop.

Si plusieurs drapeaux d'alignement horizontal ou vertical sont activés, l'alignement résultant est indéfini.

Si Qt::TextExpandTabs est défini dans flags, alors : si tabArray est non nul, il spécifie une séquence à terminaison 0 de positions de pixels pour les tabulations ; sinon, si tabStops est non nul, il est utilisé comme espacement des tabulations (en pixels).

Notez que le rectangle de délimitation peut s'étendre à gauche de (0, 0), par exemple pour les polices en italique, et que la sortie du texte peut couvrir tous les pixels du rectangle de délimitation.

Les caractères de retour à la ligne sont traités comme des sauts de ligne.

Malgré la différence de hauteur des caractères, les hauteurs des rectangles de délimitation de "oui" et "oui" sont les mêmes.

Le rectangle englobant renvoyé par cette fonction est un peu plus grand que celui calculé par la fonction plus simple boundingRect(). Cette fonction utilise les paliers de police maximum left et right, ce qui est nécessaire pour aligner correctement le texte sur plusieurs lignes. En outre, fontHeight() et lineSpacing() sont utilisés pour calculer la hauteur, plutôt que la hauteur des caractères individuels.

Il s'agit d'une fonction surchargée.

Voir aussi horizontalAdvance(), QPainter::boundingRect() et 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

Renvoie le rectangle de délimitation de l'adresse text dans le rectangle spécifié par les coordonnées x et y, width et height.

Si Qt::TextExpandTabs est défini dans flags et que tabArray n'est pas nul, il spécifie une séquence de positions de pixels terminées par 0 pour les tabulations ; sinon, si tabStops est non nul, il est utilisé comme espacement des tabulations (en pixels).

Il s'agit d'une fonction surchargée.

int QFontMetrics::capHeight() const

Renvoie la hauteur du chapeau de la police.

La hauteur du chapeau d'une police est la hauteur d'une lettre majuscule au-dessus de la ligne de base. Il s'agit en particulier de la hauteur des lettres capitales plates - telles que H ou I - par opposition aux lettres rondes telles que O, ou aux lettres pointues telles que A, qui peuvent toutes deux présenter un dépassement.

Voir également ascent().

int QFontMetrics::descent() const

Renvoie la descente de la police.

La descente est la distance entre la ligne de base et le point le plus bas auquel les caractères s'étendent. Dans la pratique, certains concepteurs de polices enfreignent cette règle, par exemple pour tenir compte d'un certain caractère, et il est donc possible (bien que rare) que cette valeur soit trop petite.

Voir également ascent().

QString QFontMetrics::elidedText(const QString &text, Qt::TextElideMode mode, int width, int flags = 0) const

Si la chaîne text est plus large que width, elle renvoie une version élidée de la chaîne (c'est-à-dire une chaîne contenant "..."). Sinon, il renvoie la chaîne originale.

Le paramètre mode indique si le texte est élidé à gauche (par exemple, "...tech"), au milieu (par exemple, "Tr...ch") ou à droite (par exemple, "Trol...").

L'adresse width est spécifiée en pixels et non en caractères.

L'argument flags est facultatif et ne prend actuellement en charge que la valeur Qt::TextShowMnemonic.

La marque d'élide suit le layoutdirection. Par exemple, elle sera à droite du texte pour les mises en page de droite à gauche si le mode est Qt::ElideLeft, et à gauche du texte si le mode est Qt::ElideRight.

qreal QFontMetrics::fontDpi() const

Renvoie le DPI de la police.

int QFontMetrics::height() const

Renvoie la hauteur de la police.

Elle est toujours égale à ascent()+descent().

Voir aussi leading() et lineSpacing().

[since 6.3] int QFontMetrics::horizontalAdvance(const QString &text, const QTextOption &option) const

Renvoie l'avance horizontale en pixels de text, tracée à l'aide de option.

L'avance est la distance appropriée pour dessiner un caractère suivant après text.

Cette fonction a été introduite dans Qt 6.3.

Voir aussi boundingRect().

int QFontMetrics::horizontalAdvance(const QString &text, int len = -1) const

len Renvoie l'avance horizontale en pixels des premiers caractères de text. Si len est négatif (par défaut), la chaîne entière est utilisée. Toute la longueur de text est analysée, même si len est sensiblement plus court.

Il s'agit de la distance appropriée pour dessiner un caractère suivant après text.

Voir aussi boundingRect().

int QFontMetrics::horizontalAdvance(QChar ch) const

Paliers

Renvoie l'avance horizontale du caractère ch en pixels. Il s'agit d'une distance appropriée pour dessiner un caractère suivant après ch.

Certaines des mesures sont décrites dans l'image. Les rectangles sombres centraux couvrent l'avance horizontale logique () de chaque caractère. Les rectangles pâles extérieurs couvrent les leftBearing() et rightBearing() de chaque caractère. Notez que les roulements de "f" dans cette police particulière sont tous deux négatifs, tandis que les roulements de "o" sont tous deux positifs.

Attention : Cette fonction produira des résultats incorrects pour les caractères arabes ou les marques de non-espacement au milieu d'une chaîne, car la formation des glyphes et le positionnement des marques qui se produisent lors du traitement des chaînes ne peuvent pas être pris en compte. Lors de la mise en œuvre d'un contrôle de texte interactif, utilisez plutôt QTextLayout.

Il s'agit d'une fonction surchargée.

Voir aussi boundingRect().

bool QFontMetrics::inFont(QChar ch) const

Renvoie true si le caractère ch est un caractère valide dans la police ; sinon, renvoie false.

bool QFontMetrics::inFontUcs4(uint ucs4) const

Renvoie true si le caractère ucs4 encodé en UCS-4/UTF-32 est un caractère valide dans la police ; sinon, renvoie false.

int QFontMetrics::leading() const

Renvoie l'espacement de la police.

Il s'agit de l'espacement naturel entre les lignes.

Voir aussi height() et lineSpacing().

int QFontMetrics::leftBearing(QChar ch) const

Renvoie l'orientation gauche du caractère ch dans la police.

L'orientation gauche est la distance vers la droite du pixel le plus à gauche du caractère par rapport à l'origine logique du caractère. Cette valeur est négative si les pixels du caractère s'étendent à gauche de l'origine logique.

Voir horizontalAdvance() pour une description graphique de cette mesure.

Voir également rightBearing(), minLeftBearing() et horizontalAdvance().

int QFontMetrics::lineSpacing() const

Renvoie la distance entre une ligne de base et la suivante.

Cette valeur est toujours égale à leading()+height().

Voir également height() et leading().

int QFontMetrics::lineWidth() const

Renvoie la largeur des lignes soulignées et barrées, ajustée en fonction de la taille de la police.

Voir aussi underlinePos(), overlinePos(), et strikeOutPos().

int QFontMetrics::maxWidth() const

Renvoie la largeur du caractère le plus large de la police.

int QFontMetrics::minLeftBearing() const

Renvoie l'orientation minimale à gauche de la police.

Il s'agit du plus petit leftBearing(char) de tous les caractères de la police.

Notez que cette fonction peut être très lente si la police est grande.

Voir aussi minRightBearing() et leftBearing().

int QFontMetrics::minRightBearing() const

Renvoie l'orientation minimale à droite de la police.

Il s'agit du plus petit rightBearing(char) de tous les caractères de la police.

Notez que cette fonction peut être très lente si la police est grande.

Voir aussi minLeftBearing() et rightBearing().

int QFontMetrics::overlinePos() const

Renvoie la distance entre la ligne de base et l'endroit où un surlignage doit être dessiné.

Voir aussi underlinePos(), strikeOutPos() et lineWidth().

int QFontMetrics::rightBearing(QChar ch) const

Renvoie l'orientation droite du caractère ch dans la police.

L'orientation à droite est la distance vers la gauche du pixel le plus à droite du caractère par rapport à l'origine logique d'un caractère ultérieur. Cette valeur est négative si les pixels du caractère s'étendent vers la droite du horizontalAdvance() du caractère.

Voir horizontalAdvance() pour une description graphique de cette mesure.

Voir également leftBearing(), minRightBearing() et horizontalAdvance().

QSize QFontMetrics::size(int flags, const QString &text, int tabStops = 0, int *tabArray = nullptr) const

Renvoie la taille en pixels de text.

L'argument flags est le OU binaire des drapeaux suivants :

Si Qt::TextExpandTabs est défini dans flags, alors : si tabArray est non nul, il spécifie une séquence de positions de pixels terminées par 0 pour les tabulations ; sinon, si tabStops est non nul, il est utilisé comme espacement des tabulations (en pixels).

Les caractères de retour à la ligne sont traités comme des sauts de ligne.

Malgré la différence de hauteur des caractères, les hauteurs des rectangles délimitant "Yes" et "yes" sont les mêmes.

Voir également boundingRect().

int QFontMetrics::strikeOutPos() const

Renvoie la distance entre la ligne de base et l'endroit où la ligne de strikeout devrait être tracée.

Voir aussi underlinePos(), overlinePos(), et lineWidth().

[noexcept] void QFontMetrics::swap(QFontMetrics &other)

Remplace cette instance de métriques de polices par other. Cette opération est très rapide et n'échoue jamais.

QRect QFontMetrics::tightBoundingRect(const QString &text) const

Renvoie un rectangle de délimitation serré autour des caractères de la chaîne spécifiée par text. Le rectangle englobe toujours au moins l'ensemble des pixels que le texte couvrirait s'il était dessiné à (0, 0).

Notez que le rectangle délimité peut s'étendre à gauche de (0, 0), par exemple pour les polices en italique, et que la largeur du rectangle renvoyé peut être différente de celle renvoyée par la méthode horizontalAdvance().

Si vous souhaitez connaître la largeur anticipée de la chaîne (pour disposer un ensemble de chaînes les unes à côté des autres), utilisez plutôt horizontalAdvance().

Les caractères de retour à la ligne sont traités comme des caractères normaux, et non comme des retours à la ligne.

Voir aussi horizontalAdvance(), height() et boundingRect().

[since 6.3] QRect QFontMetrics::tightBoundingRect(const QString &text, const QTextOption &option) const

Renvoie un rectangle de délimitation serré autour des caractères de la chaîne spécifiée par text, tracé à l'aide de option. Le rectangle englobe toujours au moins l'ensemble des pixels que le texte couvrirait s'il était dessiné à (0, 0).

Notez que le rectangle délimité peut s'étendre à gauche de (0, 0), par exemple pour les polices en italique, et que la largeur du rectangle renvoyé peut être différente de celle renvoyée par la méthode horizontalAdvance().

Si vous souhaitez connaître la largeur anticipée de la chaîne (pour disposer un ensemble de chaînes les unes à côté des autres), utilisez plutôt horizontalAdvance().

Les caractères de retour à la ligne sont traités comme des caractères normaux, et non comme des retours à la ligne.

Cette fonction a été introduite dans Qt 6.3.

Voir aussi horizontalAdvance(), height() et boundingRect().

int QFontMetrics::underlinePos() const

Renvoie la distance entre la ligne de base et l'endroit où un trait de soulignement doit être dessiné.

Voir aussi overlinePos(), strikeOutPos() et lineWidth().

int QFontMetrics::xHeight() const

Renvoie la hauteur 'x' de la police. Il s'agit souvent, mais pas toujours, de la hauteur du caractère "x".

bool QFontMetrics::operator!=(const QFontMetrics &other) const

Renvoie true si other n'est pas égal à cet objet ; sinon, renvoie false.

Deux métriques de polices sont considérées comme égales si elles ont été construites à partir du même QFont et si les dispositifs de peinture pour lesquels elles ont été construites sont considérés comme compatibles.

Voir également operator==().

[noexcept] QFontMetrics &QFontMetrics::operator=(QFontMetrics &&other)

Move-assigne other à cette instance QFontMetrics.

QFontMetrics &QFontMetrics::operator=(const QFontMetrics &fm)

Affecte les métriques de la police fm.

bool QFontMetrics::operator==(const QFontMetrics &other) const

Renvoie true si other est égal à cet objet ; sinon, renvoie false.

Deux métriques de polices sont considérées comme égales si elles ont été construites à partir du même QFont et si les dispositifs de peinture pour lesquels elles ont été construites sont considérés comme compatibles.

Voir également 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.