En esta página

QPen Class

La clase QPen define cómo un QPainter debe dibujar líneas y contornos de formas. Más...

Cabecera: #include <QPen>
CMake: find_package(Qt6 REQUIRED COMPONENTS Gui)
target_link_libraries(mytarget PRIVATE Qt6::Gui)
qmake: QT += gui

Funciones Públicas

QPen()
QPen(Qt::PenStyle style)
QPen(const QColor &color)
QPen(const QBrush &brush, qreal width, Qt::PenStyle style = Qt::SolidLine, Qt::PenCapStyle cap = Qt::SquareCap, Qt::PenJoinStyle join = Qt::BevelJoin)
QPen(const QPen &pen)
QPen(QPen &&pen)
~QPen()
QBrush brush() const
Qt::PenCapStyle capStyle() const
QColor color() const
qreal dashOffset() const
QList<qreal> dashPattern() const
bool isCosmetic() const
bool isSolid() const
Qt::PenJoinStyle joinStyle() const
qreal miterLimit() const
void setBrush(const QBrush &brush)
void setCapStyle(Qt::PenCapStyle style)
void setColor(const QColor &color)
void setCosmetic(bool cosmetic)
void setDashOffset(qreal offset)
void setDashPattern(const QList<qreal> &pattern)
void setJoinStyle(Qt::PenJoinStyle style)
void setMiterLimit(qreal limit)
void setStyle(Qt::PenStyle style)
void setWidth(int width)
void setWidthF(qreal width)
Qt::PenStyle style() const
void swap(QPen &other)
int width() const
qreal widthF() const
operator QVariant() const
bool operator!=(const QPen &pen) const
QPen &operator=(QPen &&other)
QPen &operator=(const QPen &pen)
(since 6.9) QPen &operator=(QColor color)
(since 6.9) QPen &operator=(Qt::PenStyle style)
bool operator==(const QPen &pen) const
QDataStream &operator<<(QDataStream &stream, const QPen &pen)
QDataStream &operator>>(QDataStream &stream, QPen &pen)

Descripción Detallada

Un bolígrafo tiene style(), width(), brush(), capStyle() y joinStyle().

El estilo de la pluma define el tipo de trazo. El pincel se utiliza para rellenar los trazos generados con la pluma. Utilice la clase QBrush para especificar los estilos de relleno. El estilo de remate determina los remates de línea que se pueden dibujar con QPainter, mientras que el estilo de unión describe cómo se dibujan las uniones entre dos líneas. La anchura de la pluma puede especificarse tanto en precisión entera (width()) como en coma flotante (widthF()). Una anchura de línea de cero indica una pluma cosmética. Esto significa que el ancho de la pluma se dibuja siempre a un píxel de ancho, independientemente de la transformation establecida en el pintor.

Los distintos ajustes pueden modificarse fácilmente mediante las funciones correspondientes setStyle(), setWidth(), setBrush(), setCapStyle() y setJoinStyle() (tenga en cuenta que la pluma del pintor debe restablecerse al modificar las propiedades de la pluma).

Por ejemplo

QPainter painter(this);
QPen pen(Qt::green, 3, Qt::DashDotLine, Qt::RoundCap, Qt::RoundJoin);
painter.setPen(pen);

que equivale a

QPainter painter(this);
QPen pen;  // creates a default pen

pen.setStyle(Qt::DashDotLine);
pen.setWidth(3);
pen.setBrush(Qt::green);
pen.setCapStyle(Qt::RoundCap);
pen.setJoinStyle(Qt::RoundJoin);

painter.setPen(pen);

El lápiz por defecto es un pincel negro sólido con 1 de ancho, estilo de tapa cuadrada (Qt::SquareCap), y estilo de unión en bisel (Qt::BevelJoin).

Además QPen proporciona las funciones de conveniencia color() y setColor() para extraer y establecer el color del pincel del bolígrafo, respectivamente. Los lápices también se pueden comparar y transmitir.

Para más información sobre la pintura en general, consulte la documentación del Sistema de Pintura.

Estilo del lápiz

Qt proporciona varios estilos integrados representados por el enum Qt::PenStyle:

Simplemente utilice la función setStyle() para convertir el estilo del lápiz a cualquiera de los estilos incorporados, excepto el estilo Qt::CustomDashLine al que volveremos en breve. Establecer el estilo a Qt::NoPen indica al pintor que no dibuje líneas ni contornos. El estilo de lápiz por defecto es Qt::SolidLine.

Desde Qt 4.1 también es posible especificar un patrón de guiones personalizado usando la función setDashPattern() que implícitamente convierte el estilo del lápiz a Qt::CustomDashLine. El argumento del patrón, a QList, debe especificarse como un número par de entradas qreal donde las entradas 1, 3, 5... son los guiones y 2, 4, 6... son los espacios. Por ejemplo, el patrón personalizado que se muestra arriba se crea utilizando el siguiente código:

QPen pen;
QList<qreal> dashes;
qreal space = 4;

dashes << 1 << space << 3 << space << 9 << space
           << 27 << space << 9 << space;

pen.setDashPattern(dashes);

Tenga en cuenta que el patrón de guiones se especifica en unidades del ancho de los bolígrafos, por ejemplo, un guión de longitud 5 en un ancho de 10 tiene una longitud de 50 píxeles.

El patrón de guiones actual puede recuperarse utilizando la función dashPattern(). Utilice la función isSolid() para determinar si la pluma tiene un relleno sólido o no.

Estilo de tapa

El estilo de remate define cómo se dibujan los puntos finales de las líneas utilizando QPainter. El estilo cap sólo se aplica a líneas anchas, es decir, cuando la anchura es 1 o mayor. El enum Qt::PenCapStyle proporciona los siguientes estilos:

El estilo Qt::SquareCap es un final de línea cuadrado que cubre el punto final y se extiende más allá de él la mitad del ancho de la línea. El estilo Qt::FlatCap es un final de línea cuadrado que no cubre el punto final de la línea. Y el estilo Qt::RoundCap es un final de línea redondeado que cubre el punto final.

El estilo por defecto es Qt::SquareCap.

Si los puntos finales se dibujan o no cuando el ancho de la pluma es 0 o 1 depende del estilo de tapa. Usando Qt::SquareCap o Qt::RoundCap se dibujan, usando Qt::FlatCap no se dibujan.

Estilo de unión

El estilo de unión define cómo se dibujan las uniones entre dos líneas conectadas usando QPainter. El estilo de unión sólo se aplica a líneas anchas, es decir, cuando la anchura es 1 o mayor. El enum Qt::PenJoinStyle proporciona los siguientes estilos:

El estilo Qt::BevelJoin rellena la muesca triangular entre las dos líneas. El estilo Qt::MiterJoin extiende las líneas para que se encuentren en un ángulo. Y el estilo Qt::RoundJoin rellena un arco circular entre las dos líneas.

El estilo por defecto es Qt::BevelJoin.

Ilustración que muestra cómo miterLimit controla la longitud de la esquina afilada para miterJoin

Cuando se aplica el estilo Qt::MiterJoin, es posible utilizar la función setMiterLimit() para especificar hasta dónde puede extenderse la unión a inglete desde el punto de unión. La función miterLimit() se utiliza para reducir los artefactos entre las uniones de líneas cuando éstas son casi paralelas.

miterLimit() debe especificarse en unidades del ancho de las plumas, por ejemplo, un límite de inglete de 5 en un ancho de 10 es 50 píxeles de largo. El límite de inglete por defecto es 2, es decir, el doble de la anchura de la pluma en píxeles.

Ejemplo de trazado

El ejemplo de trazo de trayectoria muestra los patrones de trazo incorporados en Qt y muestra cómo se pueden utilizar patrones personalizados para ampliar la gama de patrones disponibles.

Vea también QPainter, QBrush, Ejemplo de Trazo de Ruta, y Ejemplo de Garabato.

Documentación de funciones miembro

QPen::QPen()

Construye una pluma de línea sólida negra predeterminada con 1 de ancho.

QPen::QPen(Qt::PenStyle style)

Construye un bolígrafo negro con 1 de ancho y la dirección style.

Véase también setStyle().

QPen::QPen(const QColor &color)

Construye un lápiz de línea sólida con 1 de ancho y la dirección color.

Véase también setBrush() y setColor().

QPen::QPen(const QBrush &brush, qreal width, Qt::PenStyle style = Qt::SolidLine, Qt::PenCapStyle cap = Qt::SquareCap, Qt::PenJoinStyle join = Qt::BevelJoin)

Construye un bolígrafo con los estilos brush, width, bolígrafo style, cap y join especificados.

Véase también setBrush(), setWidth(), setStyle(), setCapStyle() y setJoinStyle().

[noexcept] QPen::QPen(const QPen &pen)

Construye un bolígrafo que es una copia del dado pen.

[constexpr noexcept] QPen::QPen(QPen &&pen)

Construye un bolígrafo que se mueve desde la dirección pen.

El bolígrafo movido desde sólo puede ser asignado, copiado o destruido. Cualquier otra operación (antes de la asignación) conduce a un comportamiento indefinido.

[noexcept] QPen::~QPen()

Destruye la pluma.

QBrush QPen::brush() const

Devuelve el pincel utilizado para rellenar los trazos generados con esta pluma.

Véase también setBrush().

Qt::PenCapStyle QPen::capStyle() const

Devuelve el estilo del capuchón del bolígrafo.

Véase también setCapStyle() y Cap Style.

QColor QPen::color() const

Devuelve el color del pincel de este rotulador.

Véase también brush() y setColor().

qreal QPen::dashOffset() const

Devuelve el desplazamiento del guión de la pluma.

Véase también setDashOffset().

QList<qreal> QPen::dashPattern() const

Devuelve el patrón de guiones de este bolígrafo.

Véase también setDashPattern(), style() y isSolid().

bool QPen::isCosmetic() const

Devuelve true si la pluma es cosmética; en caso contrario devuelve false.

Los lápices cosméticos se utilizan para dibujar trazos que tienen una anchura constante independientemente de las transformaciones aplicadas a QPainter con las que se utilizan. Dibujar una forma con un lápiz cosmético asegura que su contorno tendrá el mismo grosor a diferentes factores de escala.

Un lápiz de anchura cero es cosmético por defecto.

Véase también setCosmetic() y widthF().

bool QPen::isSolid() const

Devuelve true si el lápiz tiene un relleno sólido, en caso contrario false.

Véase también style() y dashPattern().

Qt::PenJoinStyle QPen::joinStyle() const

Devuelve el estilo de unión de la pluma.

Véase también setJoinStyle() y Join Style.

qreal QPen::miterLimit() const

Devuelve el límite de inglete de la pluma. El límite de inglete sólo es relevante cuando el estilo de unión se establece en Qt::MiterJoin.

Véase también setMiterLimit() y Join Style.

void QPen::setBrush(const QBrush &brush)

Establece el pincel utilizado para rellenar los trazos generados con este lápiz en la dirección brush.

Véase también brush() y setColor().

void QPen::setCapStyle(Qt::PenCapStyle style)

Establece el estilo del capuchón del bolígrafo en style. El valor por defecto es Qt::SquareCap.

Véase también capStyle() y Cap Style.

void QPen::setColor(const QColor &color)

Establece el color del pincel de este bolígrafo en la dirección color.

Véase también setBrush() y color().

void QPen::setCosmetic(bool cosmetic)

Establece este bolígrafo como cosmético o no cosmético, dependiendo del valor de cosmetic.

Véase también isCosmetic().

void QPen::setDashOffset(qreal offset)

Establece el desplazamiento del guión (el punto de inicio del patrón de guiones) para este bolígrafo en offset especificado. El desplazamiento se mide en términos de las unidades utilizadas para especificar el patrón de guiones.

Por ejemplo, un patrón en el que cada trazo tiene una longitud de cuatro unidades, seguido de un espacio de dos unidades, comenzará con el trazo cuando se dibuje como una línea.

Sin embargo, si el desplazamiento del guión se fija en 4,0, cualquier línea que se dibuje comenzará con el espacio. Los valores de desplazamiento hasta 4,0 harán que parte del trazo se dibuje primero, y los valores de desplazamiento entre 4,0 y 6,0 harán que la línea comience con parte del espacio.

Nota: Esto convierte implícitamente el estilo de la pluma a Qt::CustomDashLine.

Véase también dashOffset().

void QPen::setDashPattern(const QList<qreal> &pattern)

Establece el patrón de guiones de este bolígrafo en la dirección pattern. Esto convierte implícitamente el estilo de la pluma a Qt::CustomDashLine.

El patrón debe especificarse como un número par de entradas positivas donde las entradas 1, 3, 5... son los guiones y 2, 4, 6... son los espacios. Por ejemplo:

QPen pen;
QList<qreal> dashes;
qreal space = 4;
dashes << 1 << space << 3 << space << 9 << space
           << 27 << space << 9 << space;
pen.setDashPattern(dashes);

El patrón de guiones se especifica en unidades de la anchura de la pluma; por ejemplo, un guión de longitud 5 en anchura 10 tiene una longitud de 50 píxeles. Tenga en cuenta que una pluma con anchura cero equivale a una pluma cosmética con una anchura de 1 píxel.

Cada guión también está sujeto a los estilos de tapa, por lo que un guión de 1 con tapa cuadrada se extenderá 0,5 píxeles en cada dirección, lo que resulta en una anchura total de 2.

Tenga en cuenta que el estilo de remate por defecto es Qt::SquareCap, lo que significa que un final de línea cuadrado cubre el punto final y se extiende más allá de él la mitad del ancho de la línea.

Véase también setStyle(), dashPattern(), setCapStyle() y setCosmetic().

void QPen::setJoinStyle(Qt::PenJoinStyle style)

Establece el estilo de unión del bolígrafo en style. El valor por defecto es Qt::BevelJoin.

Véase también joinStyle() y Join Style.

void QPen::setMiterLimit(qreal limit)

Establece el límite de inglete de esta pluma en la dirección limit.

El límite de inglete describe hasta dónde puede extenderse una unión de inglete desde el punto de unión. Esto se utiliza para reducir los artefactos entre las uniones de líneas donde las líneas son casi paralelas.

Este valor sólo tiene efecto cuando el estilo de pluma es Qt::MiterJoin. El valor se especifica en unidades de la anchura de la pluma, por ejemplo, un límite de inglete de 5 en anchura 10 es 50 píxeles de largo. El límite de inglete por defecto es 2, es decir, el doble de la anchura de la pluma en píxeles.

Véase también miterLimit(), setJoinStyle(), y Join Style.

void QPen::setStyle(Qt::PenStyle style)

Establece el estilo de la pluma en style.

Consulte la documentación de Qt::PenStyle para obtener una lista de los estilos disponibles. Desde Qt 4.1 también es posible especificar un patrón de guión personalizado usando la función setDashPattern() que implícitamente convierte el estilo del bolígrafo a Qt::CustomDashLine.

Nota: Esta función restablece el desplazamiento del guión a cero.

Véase también style() y Pen Style.

void QPen::setWidth(int width)

Establece la anchura de la pluma en width en píxeles con precisión entera.

Un ancho de línea de cero indica una pluma cosmética. Esto significa que el ancho de la pluma siempre se dibuja con un píxel de ancho, independientemente de transformation establecido en el pintor.

No se admite establecer un ancho de pluma con un valor negativo.

Véase también setWidthF() y width().

void QPen::setWidthF(qreal width)

Establece la anchura de la pluma en width en píxeles con precisión de coma flotante.

Un ancho de línea de cero indica una pluma cosmética. Esto significa que el ancho de la pluma siempre se dibuja con un píxel de ancho, independientemente de transformation en el pintor.

No se admite la configuración de un ancho de pluma con un valor negativo.

Véase también setWidth() y widthF().

Qt::PenStyle QPen::style() const

Devuelve el estilo de la pluma.

Véase también setStyle() y Pen Style.

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

Cambia este bolígrafo por other. Esta operación es muy rápida y nunca falla.

int QPen::width() const

Devuelve el ancho de la pluma con precisión entera.

Véase también setWidth() y widthF().

qreal QPen::widthF() const

Devuelve el ancho de la pluma con precisión de coma flotante.

Véase también setWidthF() y width().

QPen::operator QVariant() const

Devuelve el bolígrafo como QVariant.

bool QPen::operator!=(const QPen &pen) const

Devuelve true si la pluma es diferente de la dada pen; en caso contrario false. Dos bolígrafos son diferentes si tienen estilos, anchos o colores diferentes.

Véase también operator==().

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

Mover-asigna other a esta instancia QPen.

[noexcept] QPen &QPen::operator=(const QPen &pen)

Asigna el pen dado a este bolígrafo y devuelve una referencia a este bolígrafo.

[since 6.9] QPen &QPen::operator=(QColor color)

Convierte este bolígrafo en un bolígrafo sólido con el color dado y los estilos de tapa y junta predeterminados, y devuelve una referencia a este bol ígrafo.

Se trata de una función sobrecargada.

Esta función se introdujo en Qt 6.9.

[since 6.9] QPen &QPen::operator=(Qt::PenStyle style)

Convierte este bolígrafo en un bolígrafo negro sólido con los estilos de tapa y junta predeterminados, y devuelve una referencia a este bolígrafo.

Se trata de una función sobrecargada.

Esta función se introdujo en Qt 6.9.

bool QPen::operator==(const QPen &pen) const

Devuelve true si la pluma es igual a la dada pen; en caso contrario false. Dos plumas son iguales si tienen estilos, anchos y colores iguales.

Véase también operator!=().

No miembros relacionados

QDataStream &operator<<(QDataStream &stream, const QPen &pen)

Escribe el pen dado en el stream dado y devuelve una referencia al stream.

Véase también Serializar tipos de datos Qt.

QDataStream &operator>>(QDataStream &stream, QPen &pen)

Lee una pluma del stream dado en el pen dado y devuelve una referencia al stream.

Véase también Serializar tipos de datos Qt.

© 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.