QTextLayout Class
La clase QTextLayout se utiliza para diseñar y renderizar texto. Más...
| Cabecera: | #include <QTextLayout> |
| CMake: | find_package(Qt6 REQUIRED COMPONENTS Gui)target_link_libraries(mytarget PRIVATE Qt6::Gui) |
| qmake: | QT += gui |
- Lista de todos los miembros, incluidos los heredados
- QTextLayout es parte de las APIs de Procesamiento de Texto Enriquecido.
Nota: Todas las funciones de esta clase son reentrantes.
Tipos Públicos
| struct | FormatRange |
| enum | CursorMode { SkipCharacters, SkipWords } |
(since 6.5) enum | GlyphRunRetrievalFlag { RetrieveGlyphIndexes, RetrieveGlyphPositions, RetrieveStringIndexes, RetrieveString, RetrieveAll } |
| flags | GlyphRunRetrievalFlags |
Funciones Públicas
| QTextLayout() | |
| QTextLayout(const QString &text) | |
| QTextLayout(const QString &text, const QFont &font, const QPaintDevice *paintdevice = nullptr) | |
| ~QTextLayout() | |
| void | beginLayout() |
| QRectF | boundingRect() const |
| bool | cacheEnabled() const |
| void | clearFormats() |
| void | clearLayout() |
| QTextLine | createLine() |
| Qt::CursorMoveStyle | cursorMoveStyle() const |
| void | draw(QPainter *p, const QPointF &pos, const QList<QTextLayout::FormatRange> &selections = QList<FormatRange>(), const QRectF &clip = QRectF()) const |
| void | drawCursor(QPainter *painter, const QPointF &position, int cursorPosition, int width) const |
| void | drawCursor(QPainter *painter, const QPointF &position, int cursorPosition) const |
| void | endLayout() |
| QFont | font() const |
| QList<QTextLayout::FormatRange> | formats() const |
| QList<QGlyphRun> | glyphRuns(int from = -1, int length = -1) const |
(since 6.5) QList<QGlyphRun> | glyphRuns(int from, int length, QTextLayout::GlyphRunRetrievalFlags retrievalFlags) const |
| bool | isValidCursorPosition(int pos) const |
| int | leftCursorPosition(int oldPos) const |
| QTextLine | lineAt(int i) const |
| int | lineCount() const |
| QTextLine | lineForTextPosition(int pos) const |
| qreal | maximumWidth() const |
| qreal | minimumWidth() const |
| int | nextCursorPosition(int oldPos, QTextLayout::CursorMode mode = SkipCharacters) const |
| QPointF | position() const |
| int | preeditAreaPosition() const |
| QString | preeditAreaText() const |
| int | previousCursorPosition(int oldPos, QTextLayout::CursorMode mode = SkipCharacters) const |
| int | rightCursorPosition(int oldPos) const |
| void | setCacheEnabled(bool enable) |
| void | setCursorMoveStyle(Qt::CursorMoveStyle style) |
| void | setFont(const QFont &font) |
| void | setFormats(const QList<QTextLayout::FormatRange> &formats) |
| void | setPosition(const QPointF &p) |
| void | setPreeditArea(int position, const QString &text) |
| void | setText(const QString &string) |
| void | setTextOption(const QTextOption &option) |
| QString | text() const |
| const QTextOption & | textOption() const |
Descripción Detallada
Ofrece muchas de las características que se esperan de un motor de diseño de texto moderno, incluyendo el renderizado compatible con Unicode, el salto de línea y el manejo del posicionamiento del cursor. También puede producir y renderizar diseños independientes del dispositivo, algo importante para las aplicaciones WYSIWYG.
La clase tiene un API de bajo nivel y a menos que quieras implementar tu propio renderizado de texto para algún widget especializado, probablemente no necesitarás usarlo directamente.
QTextLayout puede utilizarse tanto con texto plano como con texto enriquecido.
QTextLayout puede usarse para crear una secuencia de instancias de QTextLine con anchuras dadas y puede posicionarlas independientemente en la pantalla. Una vez realizada la disposición, estas líneas pueden ser dibujadas en un dispositivo de pintura.
El texto a maquetar puede ser proporcionado en el constructor o establecido con setText().
El trazado puede verse como una secuencia de objetos QTextLine; utilice createLine() para crear una instancia QTextLine, y lineAt() o lineForTextPosition() para recuperar las líneas creadas.
A continuación se muestra un fragmento de código que muestra la fase de maquetación:
int leading = fontMetrics.leading(); qreal height = 0; textLayout.setCacheEnabled(true); textLayout.beginLayout(); while (true) { QTextLine line = textLayout.createLine(); if (!line.isValid()) break; line.setLineWidth(lineWidth); height += leading; line.setPosition(QPointF(0, height)); height += line.height(); } textLayout.endLayout();
El texto puede ser renderizado llamando a la función draw() del layout:
También es posible dibujar cada línea individualmente, por ejemplo para dibujar la última línea que cabe en un widget elidido:
QPainter painter(this); QFontMetrics fontMetrics = painter.fontMetrics(); int lineSpacing = fontMetrics.lineSpacing(); int y = 0; QTextLayout textLayout(content, painter.font()); textLayout.beginLayout(); while (true) { QTextLine line = textLayout.createLine(); if (!line.isValid()) break; line.setLineWidth(width()); const int nextLineY = y + lineSpacing; if (height() >= nextLineY + lineSpacing) { line.draw(&painter, QPoint(0, y)); y = nextLineY; } else { const QString lastLine = content.mid(line.textStart()); const QString elidedLastLine = fontMetrics.elidedText(lastLine, Qt::ElideRight, width()); painter.drawText(QPoint(0, y + fontMetrics.ascent()), elidedLastLine); line = textLayout.createLine(); break; } } textLayout.endLayout();
Para una posición dada en el texto puedes encontrar una posición válida del cursor con isValidCursorPosition(), nextCursorPosition(), y previousCursorPosition().
El propio QTextLayout puede posicionarse con setPosition(); tiene un boundingRect(), y un minimumWidth() y un maximumWidth().
Véase también QStaticText.
Documentación de tipos de miembros
enum QTextLayout::CursorMode
| Constante | Valor |
|---|---|
QTextLayout::SkipCharacters | 0 |
QTextLayout::SkipWords | 1 |
[since 6.5] enum QTextLayout::GlyphRunRetrievalFlag
flags QTextLayout::GlyphRunRetrievalFlags
GlyphRunRetrievalFlag especifica las banderas que se pasan a las funciones glyphRuns() para determinar qué propiedades del layout se devuelven en los objetos QGlyphRun. Dado que cada propiedad consumirá memoria y puede requerir asignaciones adicionales, es una buena práctica solicitar sólo las propiedades a las que necesitará acceder más tarde.
| Constante | Valor | Descripción |
|---|---|---|
QTextLayout::RetrieveGlyphIndexes | 0x1 | Recupera los índices de la fuente que corresponden a los glifos. |
QTextLayout::RetrieveGlyphPositions | 0x2 | Recupera las posiciones relativas de los glifos en el diseño. |
QTextLayout::RetrieveStringIndexes | 0x4 | Recupera los índices en la cadena original que corresponden a cada uno de los glifos. |
QTextLayout::RetrieveString | 0x8 | Recupera la cadena original de la maqueta. |
QTextLayout::RetrieveAll | 0xffff | Recupera todas las propiedades disponibles del layout. |
Este enum se introdujo en Qt 6.5.
El tipo GlyphRunRetrievalFlags es un typedef para QFlags<GlyphRunRetrievalFlag>. Almacena una combinación OR de valores GlyphRunRetrievalFlag.
Ver también glyphRuns() y QTextLine::glyphRuns().
Documentación de las funciones miembro
QTextLayout::QTextLayout()
Construye un diseño de texto vacío.
Véase también setText().
QTextLayout::QTextLayout(const QString &text)
Crea un diseño de texto para la página text.
QTextLayout::QTextLayout(const QString &text, const QFont &font, const QPaintDevice *paintdevice = nullptr)
Construye un diseño de texto para maquetar el text dado con el font especificado.
Todos los cálculos de métrica y disposición se harán en términos del dispositivo de pintura, paintdevice. Si paintdevice es nullptr los cálculos se harán en métricas de pantalla.
[noexcept] QTextLayout::~QTextLayout()
Destruye el diseño.
void QTextLayout::beginLayout()
Inicia el proceso de maquetación.
Atención: Esto invalidará la maquetación, por lo que todos los objetos QTextLine existentes que hagan referencia al contenido anterior deberán ser descartados.
Véase también endLayout().
QRectF QTextLayout::boundingRect() const
El rectángulo más pequeño que contiene todas las líneas del diseño.
bool QTextLayout::cacheEnabled() const
Devuelve true si se ha almacenado en caché la información completa sobre el diseño; en caso contrario, devuelve false.
Véase también setCacheEnabled().
void QTextLayout::clearFormats()
Borra la lista de formatos adicionales soportados por el diseño de texto.
Véase también formats() y setFormats().
void QTextLayout::clearLayout()
Borra la información de la línea en el diseño. Después de haber llamado a esta función, lineCount() devuelve 0.
Advertencia: Esto invalidará la disposición, por lo que todos los objetos QTextLine existentes que hagan referencia a los contenidos anteriores deben ser descartados.
QTextLine QTextLayout::createLine()
Devuelve una nueva línea de texto a maquetar si hay texto a insertar en la maqueta; en caso contrario devuelve una línea de texto no válida.
La maquetación de texto crea un nuevo objeto línea que comienza después de la última línea de la maquetación, o al principio si la maquetación está vacía. La maqueta mantiene un cursor interno, y cada línea se rellena con texto a partir de la posición del cursor cuando se llama a la función QTextLine::setLineWidth().
Una vez que se llama a QTextLine::setLineWidth(), se puede crear una nueva línea y rellenarla con texto. Repitiendo este proceso se rellenará todo el bloque de texto contenido en QTextLayout. Si no queda texto por insertar en la maqueta, el QTextLine devuelto no será válido (isValid() devolverá false).
Qt::CursorMoveStyle QTextLayout::cursorMoveStyle() const
El estilo de movimiento del cursor de este QTextLayout. Por defecto es Qt::LogicalMoveStyle.
Véase también setCursorMoveStyle().
void QTextLayout::draw(QPainter *p, const QPointF &pos, const QList<QTextLayout::FormatRange> &selections = QList<FormatRange>(), const QRectF &clip = QRectF()) const
Dibuja el diseño completo en el pintor p en la posición especificada por pos. El diseño renderizado incluye el selections dado y se recorta dentro del rectángulo especificado por clip.
void QTextLayout::drawCursor(QPainter *painter, const QPointF &position, int cursorPosition, int width) const
Dibuja un cursor de texto con el lápiz actual y el width especificado en el position dado utilizando el painter especificado. La posición correspondiente dentro del texto se especifica mediante cursorPosition.
void QTextLayout::drawCursor(QPainter *painter, const QPointF &position, int cursorPosition) const
Dibuja un cursor de texto con el lápiz actual en el position dado utilizando el painter especificado. La posición correspondiente dentro del texto se especifica en cursorPosition.
Se trata de una función sobrecargada.
void QTextLayout::endLayout()
Finaliza el proceso de maquetación.
Véase también beginLayout().
QFont QTextLayout::font() const
Devuelve la fuente actual que se utiliza para el diseño, o una fuente por defecto si no se ha establecido ninguna.
Véase también setFont().
QList<QTextLayout::FormatRange> QTextLayout::formats() const
Devuelve la lista de formatos adicionales soportados por el diseño de texto.
Véase también setFormats() y clearFormats().
QList<QGlyphRun> QTextLayout::glyphRuns(int from = -1, int length = -1) const
Devuelve los índices de glifos y las posiciones de todos los glifos correspondientes a los caracteres de length a partir de la posición from en este QTextLayout. Se trata de una función cara, y no debería llamarse en un contexto sensible al tiempo.
Si from es menor que cero, el recorrido de los glifos comenzará en el primer carácter de la disposición. Si length es menor que cero, abarcará toda la cadena desde la posición inicial.
Nota: Esto es equivalente a llamar a glyphRuns(from, length, QTextLayout::GlyphRunRetrievalFlag::GlyphIndexes | QTextLayout::GlyphRunRetrievalFlag::GlyphPositions).
Esta es una función sobrecargada.
Ver también draw() y QPainter::drawGlyphRun().
[since 6.5] QList<QGlyphRun> QTextLayout::glyphRuns(int from, int length, QTextLayout::GlyphRunRetrievalFlags retrievalFlags) const
Devuelve los índices de glifos y las posiciones de todos los glifos correspondientes a los caracteres de length que comienzan en la posición from en este QTextLayout. Se trata de una función cara, y no debería llamarse en un contexto sensible al tiempo.
Si from es menor que cero, el recorrido de los glifos comenzará en el primer carácter de la disposición. Si length es menor que cero, abarcará toda la cadena desde la posición inicial.
retrievalFlags especifica qué propiedades de QGlyphRun se recuperarán del diseño. Para minimizar las asignaciones y el consumo de memoria, esto debería establecerse para incluir sólo las propiedades a las que necesite acceder más tarde.
Esta es una función sobrecargada.
Esta función se introdujo en Qt 6.5.
Véase también draw() y QPainter::drawGlyphRun().
bool QTextLayout::isValidCursorPosition(int pos) const
Devuelve true si la posición pos es una posición válida del cursor.
En un contexto Unicode, algunas posiciones del texto no son posiciones válidas del cursor, porque la posición está dentro de un sustituto Unicode o de un grupo de grafemas.
Un grupo de grafemas es una secuencia de dos o más caracteres Unicode que forman una entidad indivisible en la pantalla. Por ejemplo, el carácter latino `Ä' puede representarse en Unicode mediante dos caracteres, `A' (0x41) y la diéresis de combinación (0x308). Un cursor de texto sólo puede posicionarse válidamente antes o después de estos dos caracteres, nunca entre ellos, ya que no tendría sentido. En las lenguas índicas, cada sílaba forma un grupo de grafemas.
int QTextLayout::leftCursorPosition(int oldPos) const
Devuelve la posición del cursor a la izquierda de oldPos, junto a él. Depende de la posición visual de los caracteres, tras la reordenación bidireccional.
Véase también rightCursorPosition() y previousCursorPosition().
QTextLine QTextLayout::lineAt(int i) const
Devuelve la i-ésima línea de texto en este diseño de texto.
Véase también lineCount() y lineForTextPosition().
int QTextLayout::lineCount() const
Devuelve el número de líneas de este diseño de texto.
Véase también lineAt().
QTextLine QTextLayout::lineForTextPosition(int pos) const
Devuelve la línea que contiene la posición del cursor especificada por pos.
Véase también isValidCursorPosition() y lineAt().
qreal QTextLayout::maximumWidth() const
La anchura máxima a la que puede expandirse el diseño; es esencialmente la anchura de todo el texto.
Advertencia: Esta función sólo devuelve un valor válido después de que se haya realizado la maquetación.
Véase también minimumWidth().
qreal QTextLayout::minimumWidth() const
La anchura mínima que necesita el diseño. Es la anchura de la subcadena no rompible más pequeña de la presentación.
Advertencia: Esta función sólo devuelve un valor válido después de que se haya realizado la disposición.
Véase también maximumWidth().
int QTextLayout::nextCursorPosition(int oldPos, QTextLayout::CursorMode mode = SkipCharacters) const
Devuelve la siguiente posición válida del cursor después de oldPos que respeta el cursor dado mode. Devuelve el valor de oldPos, si oldPos no es una posición válida del cursor.
Véase también isValidCursorPosition() y previousCursorPosition().
QPointF QTextLayout::position() const
La posición global de la maqueta. Es independiente del rectángulo delimitador y del proceso de maquetación.
Véase también setPosition().
int QTextLayout::preeditAreaPosition() const
Devuelve la posición del área en el diseño del texto que se procesará antes de que se produzca la edición.
Véase también preeditAreaText().
QString QTextLayout::preeditAreaText() const
Devuelve el texto que se inserta en el diseño antes de que se produzca la edición.
Véase también preeditAreaPosition().
int QTextLayout::previousCursorPosition(int oldPos, QTextLayout::CursorMode mode = SkipCharacters) const
Devuelve la primera posición válida del cursor antes de oldPos que respete el cursor dado mode. Devuelve el valor de oldPos, si oldPos no es una posición válida del cursor.
Véase también isValidCursorPosition() y nextCursorPosition().
int QTextLayout::rightCursorPosition(int oldPos) const
Devuelve la posición del cursor a la derecha de oldPos, junto a él. Depende de la posición visual de los caracteres, tras la reordenación bidireccional.
Véase también leftCursorPosition() y nextCursorPosition().
void QTextLayout::setCacheEnabled(bool enable)
Activa el almacenamiento en caché de la información completa de la presentación si enable es verdadero; en caso contrario, desactiva el almacenamiento en caché de la presentación. Normalmente QTextLayout tira la mayor parte de la información de diseño después de una llamada a endLayout() para reducir el consumo de memoria. Sin embargo, si desea dibujar el texto maquetado directamente después, habilitar el almacenamiento en caché puede acelerar significativamente el dibujo.
Véase también cacheEnabled().
void QTextLayout::setCursorMoveStyle(Qt::CursorMoveStyle style)
Establece el estilo de movimiento del cursor visual en el style dado . QTextLayout QTextDocument Esta opción es para widgets como QLineEdit o widgets personalizados sin un QTextDocument. El valor por defecto es Qt::LogicalMoveStyle.
Véase también cursorMoveStyle().
void QTextLayout::setFont(const QFont &font)
Establece el tipo de letra de la maqueta en font. La maqueta se invalida y debe ser maquetada de nuevo.
Véase también font().
void QTextLayout::setFormats(const QList<QTextLayout::FormatRange> &formats)
Establece los formatos adicionales admitidos por el diseño de texto en formats. Los formatos se aplican con el texto del área de preedición en su lugar.
Véase también formats() y clearFormats().
void QTextLayout::setPosition(const QPointF &p)
Mueve la disposición del texto al punto p.
Véase también position().
void QTextLayout::setPreeditArea(int position, const QString &text)
Establece las direcciones position y text del área de la maqueta que se procesa antes de que se produzca la edición. La maqueta se invalida y debe maquetarse de nuevo.
Véase también preeditAreaPosition() y preeditAreaText().
void QTextLayout::setText(const QString &string)
Establece el texto de la maqueta en la dirección string. La maqueta se invalida y debe ser maquetada de nuevo.
Tenga en cuenta que cuando utilice este QTextLayout como parte de un QTextDocument este método no tendrá ningún efecto.
Véase también text().
void QTextLayout::setTextOption(const QTextOption &option)
Establece la estructura de opciones de texto que controla el proceso de maquetación en la dirección option.
Véase también textOption().
QString QTextLayout::text() const
Devuelve el texto del diseño.
Véase también setText().
const QTextOption &QTextLayout::textOption() const
Devuelve la opción de texto actual utilizada para controlar el proceso de maquetación.
Véase también setTextOption().
© 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.