QFontMetrics Class
La clase QFontMetrics proporciona información sobre métricas de fuentes. Más...
| Cabecera: | #include <QFontMetrics> |
| CMake: | find_package(Qt6 REQUIRED COMPONENTS Gui)target_link_libraries(mytarget PRIVATE Qt6::Gui) |
| qmake: | QT += gui |
- Lista de todos los miembros, incluyendo los heredados
- QFontMetrics es parte de Painting Classes y Implicitly Shared Classes.
Nota: Todas las funciones de esta clase son reentrantes.
Funciones Públicas
| 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 |
Descripción Detallada
Las funciones de QFontMetrics calculan el tamaño de caracteres y cadenas para una fuente dada. La clase es una versión basada en enteros de QFontMetricsF y redondeará todos los números al entero más cercano. Esto significa que sus resultados serán inexactos para cualquier fuente con métricas fraccionarias. En la mayoría de los casos debería utilizarse QFontMetricsF en su lugar.
Hay tres formas de crear un objeto QFontMetrics:
- Llamando al constructor QFontMetrics con un QFont se crea un objeto de métrica de fuente para una fuente compatible con pantalla, es decir, la fuente no puede ser una fuente de impresora. Si la fuente se cambia posteriormente, el objeto métricas de fuente no se actualiza.
(Nota: Si utiliza una fuente de impresora, los valores devueltos pueden ser inexactos. Las fuentes de impresora no siempre son accesibles, por lo que se utiliza la fuente de pantalla más cercana si se suministra una fuente de impresora).
- QWidget::fontMetrics() devuelve la métrica de la fuente de un widget. Esto es equivalente a QFontMetrics(widget->font()). Si la fuente del widget se cambia más tarde, el objeto métricas de fuente no se actualiza.
- QPainter::fontMetrics() devuelve las métricas de fuente para la fuente actual de un pintor. Si la fuente del pintor se cambia posteriormente, el objeto métricas de fuente no se actualiza.
Una vez creado, el objeto proporciona funciones para acceder a las métricas individuales de la fuente, sus caracteres, y para las cadenas renderizadas en la fuente.
Hay varias funciones que operan sobre la fuente: ascent(), descent(), height(), leading() y lineSpacing() devuelven las propiedades básicas de tamaño de la fuente. Las funciones underlinePos(), overlinePos(), strikeOutPos() y lineWidth(), devuelven las propiedades de la línea que subraya, sobretraza o tacha los caracteres. Todas estas funciones son rápidas.
También hay algunas funciones que operan sobre el conjunto de glifos de la fuente: minLeftBearing(), minRightBearing() y maxWidth(). Estas funciones son necesariamente lentas, por lo que recomendamos evitarlas si es posible.
Para cada carácter, puede obtener sus horizontalAdvance(), leftBearing() y rightBearing(), y averiguar si está en la fuente utilizando inFont(). También puede tratar el carácter como una cadena y utilizar las funciones de cadena.
Las funciones de cadena incluyen horizontalAdvance(), para devolver el ancho de avance de una cadena en píxeles (o puntos, para una impresora), boundingRect(), para devolver un rectángulo lo suficientemente grande como para contener la cadena renderizada, y size(), para devolver el tamaño de ese rectángulo.
Nota: La anchura de avance puede ser diferente de la anchura del texto renderizado. Se refiere a la distancia desde el origen de la cadena hasta el lugar donde se añadirían caracteres adicionales. Como el texto puede tener salientes (en el caso de una fuente cursiva, por ejemplo) o relleno entre caracteres, la anchura de avance puede ser menor o mayor que la representación real del texto. Esto se denomina el porte derecho del texto.
Ejemplo:
QFont font("times", 24); QFontMetrics fm(font); int pixelsWide = fm.horizontalAdvance("What's the advance width of this text?"); int pixelsHigh = fm.height();
Véase también QFont, QFontInfo, y QFontDatabase.
Documentación de las funciones miembro
[explicit] QFontMetrics::QFontMetrics(const QFont &font)
Construye un objeto de métrica de fuente para font.
Las métricas de la fuente serán compatibles con el paintdevice utilizado para crear font.
El objeto de métricas de fuente contiene la información de la fuente que se pasa en el constructor en el momento de su creación, y no se actualiza si los atributos de la fuente se cambian más tarde.
Utiliza QFontMetrics(const QFont &, QPaintDevice *) para obtener las métricas de fuente compatibles con un determinado dispositivo de pintura.
QFontMetrics::QFontMetrics(const QFont &font, const QPaintDevice *paintdevice)
Construye un objeto de métrica de fuente para font y paintdevice.
Las métricas de la fuente serán compatibles con el paintdevice pasado. Si paintdevice es nullptr, las métricas serán compatibles con la pantalla, es decir, las métricas que se obtienen si se utiliza la fuente para dibujar texto en widgets o pixmaps, no en QPicture o QPrinter.
El objeto métricas de fuente contiene la información de la fuente que se pasa en el constructor en el momento en que se crea, y no se actualiza si los atributos de la fuente se cambian más tarde.
QFontMetrics::QFontMetrics(const QFontMetrics &fm)
Construye una copia de fm.
[noexcept] QFontMetrics::~QFontMetrics()
Destruye el objeto de métricas de fuentes y libera todos los recursos asignados.
int QFontMetrics::ascent() const
Devuelve el ascendente de la fuente.
El ascendente de una fuente es la distancia desde la línea de base hasta la posición más alta a la que se extienden los caracteres. En la práctica, algunos diseñadores de fuentes rompen esta regla, por ejemplo, cuando ponen más de un acento encima de un carácter, o para acomodar un determinado carácter, por lo que es posible (aunque raro) que este valor sea demasiado pequeño.
Véase también descent().
int QFontMetrics::averageCharWidth() const
Devuelve la anchura media de los glifos de la fuente.
QRect QFontMetrics::boundingRect(QChar ch) const
Devuelve el rectángulo cubierto por la tinta si el carácter ch se dibujara en el origen del sistema de coordenadas.
Tenga en cuenta que el rectángulo delimitador puede extenderse a la izquierda de (0, 0) (por ejemplo, para fuentes en cursiva), y que la salida de texto puede cubrir todos los píxeles del rectángulo delimitador. Para un carácter de espacio, el rectángulo normalmente estará vacío.
Tenga en cuenta que el rectángulo suele extenderse tanto por encima como por debajo de la línea base.
Advertencia: La anchura del rectángulo devuelto no es la anchura de avance del carácter. Utilice boundingRect(const QString &) o horizontalAdvance() en su lugar.
Véase también horizontalAdvance().
QRect QFontMetrics::boundingRect(const QString &text) const
Devuelve el rectángulo delimitador de los caracteres de la cadena especificada por text. El rectángulo delimitador siempre cubre al menos el conjunto de píxeles que cubriría el texto si se dibujara en (0, 0).
Tenga en cuenta que el rectángulo delimitador puede extenderse a la izquierda de (0, 0), por ejemplo para fuentes en cursiva, y que la anchura del rectángulo devuelto puede ser diferente de la que devuelve el método horizontalAdvance().
Si desea conocer el ancho de avance de la cadena (para disponer un conjunto de cadenas una junto a otra), utilice horizontalAdvance() en su lugar.
Los caracteres de nueva línea se procesan como caracteres normales, no como saltos de línea.
La altura del rectángulo delimitador es al menos tan grande como el valor devuelto por height().
Véase también horizontalAdvance(), height(), QPainter::boundingRect() y tightBoundingRect().
[since 6.3] QRect QFontMetrics::boundingRect(const QString &text, const QTextOption &option) const
Devuelve el rectángulo delimitador de los caracteres de la cadena especificada por text trazados mediante option. El rectángulo delimitador siempre cubre al menos el conjunto de píxeles que cubriría el texto si se dibujara en (0, 0).
Tenga en cuenta que el rectángulo delimitador puede extenderse a la izquierda de (0, 0), por ejemplo para fuentes en cursiva, y que la anchura del rectángulo devuelto puede ser diferente de la que devuelve el método horizontalAdvance().
Si desea conocer el ancho de avance de la cadena (para disponer un conjunto de cadenas una junto a otra), utilice horizontalAdvance() en su lugar.
Los caracteres de nueva línea se procesan como caracteres normales, no como saltos de línea.
La altura del rectángulo delimitador es al menos tan grande como el valor devuelto por height().
Esta función se introdujo en Qt 6.3.
Véase también horizontalAdvance(), height(), QPainter::boundingRect() y tightBoundingRect().
QRect QFontMetrics::boundingRect(const QRect &rect, int flags, const QString &text, int tabStops = 0, int *tabArray = nullptr) const
Devuelve el rectángulo delimitador de los caracteres de la cadena especificada por text, que es el conjunto de píxeles que cubriría el texto si se dibujara en (0, 0). El dibujo, y por tanto el rectángulo delimitador, se limita al rectángulo rect.
El argumento flags es el OR a nivel de bits de los siguientes indicadores:
- Qt::AlignLeft se alinea con el borde izquierdo, excepto en árabe y hebreo, donde se alinea con el borde derecho.
- Qt::AlignRight se alinea en el borde derecho, excepto en árabe y hebreo, en los que se alinea a la izquierda.
- Qt::AlignJustify produce texto justificado.
- Qt::AlignHCenter alinea horizontalmente centrado.
- Qt::AlignTop se alinea en el borde superior.
- Qt::AlignBottom alinea al borde inferior.
- Qt::AlignVCenter alinea verticalmente centrado
- Qt::AlignCenter (==
Qt::AlignHCenter | Qt::AlignVCenter) - Qt::TextSingleLine ignora los caracteres de nueva línea en el texto.
- Qt::TextExpandTabs expande los tabuladores (véase más abajo)
- Qt::TextShowMnemonic interpreta "&x" como x; es decir, subrayado.
- Qt::TextWordWrap rompe el texto para ajustarlo al rectángulo.
Qt::Horizontal alineación por defecto Qt::AlignLeft y alineación vertical por defecto Qt::AlignTop.
Si se establecen varios de los indicadores de alineación horizontal o varios de los indicadores de alineación vertical, la alineación resultante es indefinida.
Si Qt::TextExpandTabs se establece en flags, entonces: si tabArray no es nulo, especifica una secuencia terminada en 0 de posiciones de píxel para tabuladores; en caso contrario, si tabStops es distinto de cero, se utiliza como espaciado de tabulación (en píxeles).
Tenga en cuenta que el rectángulo delimitador puede extenderse a la izquierda de (0, 0), por ejemplo para fuentes en cursiva, y que la salida de texto puede cubrir todos los píxeles del rectángulo delimitador.
Los caracteres de nueva línea se procesan como saltos de línea.
A pesar de las diferentes alturas reales de los caracteres, las alturas de los rectángulos delimitadores de "Sí" y "sí" son las mismas.
El rectángulo delimitador devuelto por esta función es algo mayor que el calculado por la función más sencilla boundingRect(). Esta función utiliza los cojinetes de fuente maximum left y right como es necesario para que el texto multilínea se alinee correctamente. Además, se utilizan fontHeight() y lineSpacing() para calcular la altura, en lugar de las alturas de caracteres individuales.
Se trata de una función sobrecargada.
Véase también horizontalAdvance(), QPainter::boundingRect(), y 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
Devuelve el rectángulo delimitador para el text dado dentro del rectángulo especificado por las coordenadas x y y, width, y height.
Si Qt::TextExpandTabs está definido en flags y tabArray no es nulo, especifica una secuencia de posiciones de píxeles terminada en 0 para los tabuladores; de lo contrario, si tabStops es distinto de cero, se utiliza como espaciado de tabulación (en píxeles).
Se trata de una función sobrecargada.
int QFontMetrics::capHeight() const
Devuelve la altura de la mayúscula de la fuente.
La altura de remate de una fuente es la altura de una letra mayúscula por encima de la línea de base. En concreto, es la altura de las letras mayúsculas planas, como la H o la I, a diferencia de las letras redondas, como la O, o las letras puntiagudas, como la A, que pueden mostrar un rebasamiento.
Véase también ascent().
int QFontMetrics::descent() const
Devuelve el descenso de la fuente.
El descenso es la distancia desde la línea base hasta el punto más bajo al que se extienden los caracteres. En la práctica, algunos diseñadores de fuentes rompen esta regla, por ejemplo, para acomodar un determinado carácter, por lo que es posible (aunque raro) que este valor sea demasiado pequeño.
Véase también ascent().
QString QFontMetrics::elidedText(const QString &text, Qt::TextElideMode mode, int width, int flags = 0) const
Si la cadena text es más ancha que width, devuelve una versión elidida de la cadena (es decir, una cadena con "..." en ella). En caso contrario, devuelve la cadena original.
El parámetro mode especifica si el texto se elide a la izquierda (por ejemplo, "...tech"), en el centro (por ejemplo, "Tr...ch") o a la derecha (por ejemplo, "Trol...").
width se especifica en píxeles, no en caracteres.
El argumento flags es opcional y actualmente sólo admite Qt::TextShowMnemonic como valor.
La marca elide sigue a layoutdirection. Por ejemplo, estará a la derecha del texto para maquetaciones de derecha a izquierda si mode es Qt::ElideLeft, y a la izquierda del texto si mode es Qt::ElideRight.
qreal QFontMetrics::fontDpi() const
Devuelve los PPP de la fuente.
int QFontMetrics::height() const
Devuelve la altura de la fuente.
Siempre es igual a ascent()+descent().
Véase también leading() y lineSpacing().
[since 6.3] int QFontMetrics::horizontalAdvance(const QString &text, const QTextOption &option) const
Devuelve el avance horizontal en píxeles de text trazado mediante option.
El avance es la distancia apropiada para dibujar un carácter posterior después de text.
Esta función se introdujo en Qt 6.3.
Véase también boundingRect().
int QFontMetrics::horizontalAdvance(const QString &text, int len = -1) const
Devuelve el avance horizontal en píxeles de los primeros len caracteres de text. Si len es negativo (por defecto), se utiliza toda la cadena. Se analiza toda la longitud de text aunque len sea sustancialmente más corta.
Esta es la distancia apropiada para dibujar un carácter posterior después de text.
Véase también boundingRect().
int QFontMetrics::horizontalAdvance(QChar ch) const

Devuelve el avance horizontal del carácter ch en píxeles. Se trata de una distancia adecuada para dibujar un carácter posterior a ch.
Algunas de las métricas se describen en la imagen. Los rectángulos oscuros centrales cubren el avance horizontal lógico() de cada carácter. Los rectángulos pálidos exteriores cubren los leftBearing() y rightBearing() de cada carácter. Observe que las posiciones de la "f" en este tipo de letra son negativas, mientras que las posiciones de la "o" son positivas.
Atención: Esta función producirá resultados incorrectos para caracteres arábigos o marcas no espaciadas en medio de una cadena, ya que no se puede tener en cuenta la conformación de los glifos y el posicionamiento de las marcas que se produce al procesar cadenas. Cuando implemente un control de texto interactivo, utilice en su lugar QTextLayout.
Se trata de una función sobrecargada.
Véase también boundingRect().
bool QFontMetrics::inFont(QChar ch) const
Devuelve true si el carácter ch es un carácter válido en la fuente; en caso contrario devuelve false.
bool QFontMetrics::inFontUcs4(uint ucs4) const
Devuelve true si el carácter ucs4 codificado en UCS-4/UTF-32 es un carácter válido en la fuente; en caso contrario devuelve false.
int QFontMetrics::leading() const
Devuelve el interlineado de la fuente.
Es el interlineado natural.
Véase también height() y lineSpacing().
int QFontMetrics::leftBearing(QChar ch) const
Devuelve el rumbo izquierdo del carácter ch en la fuente.
El rumbo izquierdo es la distancia hacia la derecha del píxel más a la izquierda del carácter desde el origen lógico del carácter. Este valor es negativo si los píxeles del carácter se extienden hacia la izquierda del origen lógico.
Véase horizontalAdvance() para una descripción gráfica de esta métrica.
Véase también rightBearing(), minLeftBearing() y horizontalAdvance().
int QFontMetrics::lineSpacing() const
Devuelve la distancia de una línea base a la siguiente.
Este valor es siempre igual a leading()+height().
Véase también height() y leading().
int QFontMetrics::lineWidth() const
Devuelve el ancho de las líneas de subrayado y tachado, ajustado al tamaño de punto de la fuente.
Véase también underlinePos(), overlinePos() y strikeOutPos().
int QFontMetrics::maxWidth() const
Devuelve la anchura del carácter más ancho de la fuente.
int QFontMetrics::minLeftBearing() const
Devuelve el porte izquierdo mínimo de la fuente.
Es el leftBearing(char) más pequeño de todos los caracteres de la fuente.
Tenga en cuenta que esta función puede ser muy lenta si la fuente es grande.
Véase también minRightBearing() y leftBearing().
int QFontMetrics::minRightBearing() const
Devuelve el porte derecho mínimo de la fuente.
Es el rightBearing(char) más pequeño de todos los caracteres de la fuente.
Tenga en cuenta que esta función puede ser muy lenta si la fuente es grande.
Véase también minLeftBearing() y rightBearing().
int QFontMetrics::overlinePos() const
Devuelve la distancia desde la línea base hasta donde debe dibujarse una sobrelínea.
Véase también underlinePos(), strikeOutPos() y lineWidth().
int QFontMetrics::rightBearing(QChar ch) const
Devuelve la orientación derecha del carácter ch en la fuente.
El rumbo derecho es la distancia hacia la izquierda del píxel más a la derecha del carácter desde el origen lógico de un carácter posterior. Este valor es negativo si los píxeles del carácter se extienden a la derecha de horizontalAdvance() del carácter.
Véase horizontalAdvance() para una descripción gráfica de esta métrica.
Véase también leftBearing(), minRightBearing() y horizontalAdvance().
QSize QFontMetrics::size(int flags, const QString &text, int tabStops = 0, int *tabArray = nullptr) const
Devuelve el tamaño en píxeles de text.
El argumento flags es el OR a nivel de bits de los siguientes indicadores:
- Qt::TextSingleLine ignora los caracteres de nueva línea.
- Qt::TextExpandTabs expande los tabuladores (véase más adelante)
- Qt::TextShowMnemonic interpreta "&x" como x; es decir, subrayado.
- Qt::TextWordWrap rompe el texto para ajustarlo al rectángulo.
Si Qt::TextExpandTabs está definido en flags, entonces: si tabArray no es nulo, especifica una secuencia de posiciones de píxel terminada en 0 para los tabuladores; en caso contrario, si tabStops es distinto de cero, se utiliza como espaciado de tabulación (en píxeles).
Los caracteres de nueva línea se procesan como saltos de línea.
A pesar de las diferentes alturas reales de los caracteres, las alturas de los rectángulos delimitadores de "Sí" y "sí" son las mismas.
Véase también boundingRect().
int QFontMetrics::strikeOutPos() const
Devuelve la distancia desde la línea de base hasta donde debería dibujarse la línea de strikeout.
Véase también underlinePos(), overlinePos() y lineWidth().
[noexcept] void QFontMetrics::swap(QFontMetrics &other)
Intercambia esta instancia de métrica de fuentes con other. Esta operación es muy rápida y nunca falla.
QRect QFontMetrics::tightBoundingRect(const QString &text) const
Devuelve un rectángulo delimitador ajustado alrededor de los caracteres de la cadena especificada por text. El rectángulo delimitador siempre cubre al menos el conjunto de píxeles que cubriría el texto si se dibujara en (0, 0).
Tenga en cuenta que el rectángulo delimitador puede extenderse a la izquierda de (0, 0), por ejemplo para fuentes en cursiva, y que la anchura del rectángulo devuelto puede ser diferente de la que devuelve el método horizontalAdvance().
Si desea conocer el ancho de avance de la cadena (para disponer un conjunto de cadenas una junto a otra), utilice horizontalAdvance() en su lugar.
Los caracteres de nueva línea se procesan como caracteres normales, no como saltos de línea.
Véase también horizontalAdvance(), height() y boundingRect().
[since 6.3] QRect QFontMetrics::tightBoundingRect(const QString &text, const QTextOption &option) const
Devuelve un rectángulo delimitador ajustado alrededor de los caracteres de la cadena especificada por text trazados mediante option. El rectángulo delimitador siempre cubre al menos el conjunto de píxeles que cubriría el texto si se dibujara en (0, 0).
Tenga en cuenta que el rectángulo delimitador puede extenderse a la izquierda de (0, 0), por ejemplo para fuentes en cursiva, y que la anchura del rectángulo devuelto puede ser diferente de la que devuelve el método horizontalAdvance().
Si desea conocer el ancho de avance de la cadena (para disponer un conjunto de cadenas una junto a otra), utilice horizontalAdvance() en su lugar.
Los caracteres de nueva línea se procesan como caracteres normales, no como saltos de línea.
Esta función se introdujo en Qt 6.3.
Véase también horizontalAdvance(), height() y boundingRect().
int QFontMetrics::underlinePos() const
Devuelve la distancia desde la línea base hasta donde debe dibujarse un guión bajo.
Véase también overlinePos(), strikeOutPos() y lineWidth().
int QFontMetrics::xHeight() const
Devuelve la altura 'x' de la fuente. A menudo, pero no siempre, es la misma que la altura del carácter 'x'.
bool QFontMetrics::operator!=(const QFontMetrics &other) const
Devuelve true si other no es igual a este objeto; en caso contrario devuelve false.
Dos métricas de fuentes se consideran iguales si se construyeron a partir del mismo QFont y los dispositivos de pintura para los que se construyeron se consideran compatibles.
Véase también operator==().
[noexcept] QFontMetrics &QFontMetrics::operator=(QFontMetrics &&other)
Mover-asigna other a esta instancia QFontMetrics.
QFontMetrics &QFontMetrics::operator=(const QFontMetrics &fm)
Asigna la métrica de la fuente fm.
bool QFontMetrics::operator==(const QFontMetrics &other) const
Devuelve true si other es igual a este objeto; en caso contrario devuelve false.
Dos métricas de fuentes se consideran iguales si se construyeron a partir del mismo QFont y los dispositivos de pintura para los que se construyeron se consideran compatibles.
Véase también 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.