Diseño de Documentos
El diseño de un documento sólo es relevante cuando se va a mostrar en un dispositivo, o cuando se solicita alguna información que requiere una representación visual del documento. Hasta que esto ocurra, el documento no necesita ser formateado y preparado para un dispositivo.
Vista general
La maquetación de cada documento se gestiona mediante una subclase de la clase QAbstractTextDocumentLayout. Esta clase proporciona una interfaz común para los motores de maquetación y renderizado. El comportamiento de renderizado por defecto se implementa actualmente en una clase privada. Este enfoque permite crear maquetaciones personalizadas y proporciona el mecanismo utilizado cuando se preparan páginas para imprimir o exportar a archivos de formato de documento portátil (PDF).
Ejemplo - Diseño de texto con forma
A veces es importante poder dar formato a texto sin formato dentro de una región de forma irregular, tal vez al renderizar un widget personalizado, por ejemplo. Scribe ofrece funciones genéricas, como las que proporciona la clase QTextLayout, para ayudar a los desarrolladores a realizar tareas de envoltura y diseño de palabras sin necesidad de crear primero un documento.

Formatear y dibujar un párrafo de texto plano es sencillo. En el ejemplo siguiente se trazará un párrafo de texto, utilizando una sola fuente, alrededor del borde derecho de un círculo.
QTextLayout textLayout(text, font); qreal margin = 10; qreal radius = qMin(width()/2.0, height()/2.0) - margin; QFontMetrics fm(font); qreal lineHeight = fm.height(); qreal y = 0; textLayout.beginLayout(); while (1) { // create a new line QTextLine line = textLayout.createLine(); if (!line.isValid()) break; qreal x1 = qMax(0.0, pow(pow(radius,2)-pow(radius-y,2), 0.5)); qreal x2 = qMax(0.0, pow(pow(radius,2)-pow(radius-(y+lineHeight),2), 0.5)); qreal x = qMax(x1, x2) + margin; qreal lineWidth = (width() - margin) - x; line.setLineWidth(lineWidth); line.setPosition(QPointF(x, margin+y)); y += line.height(); } textLayout.endLayout(); QPainter painter; painter.begin(this); painter.setRenderHint(QPainter::Antialiasing); painter.fillRect(rect(), Qt::white); painter.setBrush(QBrush(Qt::black)); painter.setPen(QPen(Qt::black)); textLayout.draw(&painter, QPoint(0,0)); painter.setBrush(QBrush(QColor("#a6ce39"))); painter.setPen(QPen(Qt::black)); painter.drawEllipse(QRectF(-radius, margin, 2*radius, 2*radius)); painter.end();
Creamos un diseño de texto, especificando la cadena de texto que queremos mostrar y la fuente a utilizar. Nos aseguramos de que el texto que hemos suministrado tiene el formato correcto obteniendo líneas de texto a partir del formato de texto, y envolviendo el texto restante utilizando el espacio disponible. Las líneas se colocan a medida que avanzamos por la página.
El texto formateado se puede dibujar en un dispositivo de pintura; en el código anterior, el texto se dibuja directamente en un widget.
© 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.