Sur cette page

QPen Class

La classe QPen définit la manière dont QPainter doit dessiner les lignes et les contours des formes. Plus...

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

Fonctions publiques

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)

Description détaillée

Un stylo possède un style(), un width(), un brush(), un capStyle() et un joinStyle().

Le style du stylo définit le type de ligne. Le pinceau est utilisé pour remplir les traits générés par le stylo. Utilisez la classe QBrush pour spécifier les styles de remplissage. Le style de cap détermine les capuchons de fin de ligne qui peuvent être dessinés à l'aide de QPainter, tandis que le style de jonction décrit la manière dont les jonctions entre deux lignes sont dessinées. La largeur du stylo peut être spécifiée à la fois en nombre entier (width()) et en virgule flottante (widthF()). Une largeur de ligne de zéro indique un stylo cosmétique. Cela signifie que la largeur du stylo est toujours d'un pixel de large, indépendamment de l'adresse transformation définie sur le peintre.

Les différents paramètres peuvent être facilement modifiés à l'aide des fonctions correspondantes setStyle(), setWidth(), setBrush(), setCapStyle() et setJoinStyle() (notez que le stylo du peintre doit être réinitialisé lorsque vous modifiez les propriétés du stylo).

Par exemple :

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

ce qui équivaut à

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);

Le stylo par défaut est un pinceau noir solide d'une largeur de 1, avec un style de capuchon carré (Qt::SquareCap) et un style de jointure en biseau (Qt::BevelJoin).

En outre, QPen fournit les fonctions de commodité color() et setColor() pour extraire et définir la couleur de la brosse du stylo, respectivement. Les stylos peuvent également être comparés et transmis en continu.

Pour plus d'informations sur la peinture en général, voir la documentation du système de peinture.

Style de stylo

Qt fournit plusieurs styles intégrés représentés par l'enum Qt::PenStyle:

Il suffit d'utiliser la fonction setStyle() pour convertir le style de stylo en l'un ou l'autre des styles intégrés, à l'exception du style Qt::CustomDashLine sur lequel nous reviendrons prochainement. En définissant le style sur Qt::NoPen, on demande au peintre de ne pas dessiner de lignes ou de contours. Le style de stylo par défaut est Qt::SolidLine.

Depuis Qt 4.1, il est également possible de spécifier un motif de tirets personnalisé en utilisant la fonction setDashPattern() qui convertit implicitement le style du stylo en Qt::CustomDashLine. L'argument du motif, a QList, doit être spécifié comme un nombre pair d'entrées qreal où les entrées 1, 3, 5... sont les tirets et 2, 4, 6... sont les espaces. Par exemple, le modèle personnalisé illustré ci-dessus est créé à l'aide du code suivant :

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

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

pen.setDashPattern(dashes);

Notez que le motif de tirets est spécifié en unités de la largeur des stylos, c'est-à-dire qu'un tiret de longueur 5 dans une largeur de 10 a une longueur de 50 pixels.

Le motif de tirets actuellement défini peut être récupéré à l'aide de la fonction dashPattern(). La fonction isSolid() permet de déterminer si le stylo a un remplissage solide ou non.

Style de capuchon

Le style de chapeau définit la manière dont les extrémités des lignes sont dessinées à l'aide de QPainter. Le style de chapeau ne s'applique qu'aux lignes larges, c'est-à-dire lorsque la largeur est égale ou supérieure à 1. L'énumération Qt::PenCapStyle propose les styles suivants :

Le style Qt::SquareCap est une extrémité de ligne carrée qui couvre le point final et le dépasse de la moitié de la largeur de la ligne. Le style Qt::FlatCap est une fin de ligne carrée qui ne couvre pas le point final de la ligne. Le style Qt::RoundCap est un bout de ligne arrondi qui couvre l'extrémité de la ligne.

Le style par défaut est Qt::SquareCap.

Le fait que les extrémités soient dessinées ou non lorsque la largeur du stylo est de 0 ou de 1 dépend du style de capuchon. Avec Qt::SquareCap ou Qt::RoundCap, ils sont dessinés, avec Qt::FlatCap, ils ne le sont pas.

Style de jointure

Le style de jonction définit la manière dont les jonctions entre deux lignes connectées peuvent être dessinées à l'aide de QPainter. Le style de jointure ne s'applique qu'aux lignes larges, c'est-à-dire lorsque la largeur est égale ou supérieure à 1. L'énumération Qt::PenJoinStyle propose les styles suivants :

Le style Qt::BevelJoin remplit l'encoche triangulaire entre les deux lignes. Le style Qt::MiterJoin prolonge les lignes pour qu'elles se rejoignent en angle. Le style Qt::RoundJoin remplit un arc de cercle entre les deux lignes.

Le style par défaut est Qt::BevelJoin.

Illustration montrant comment miterLimit contrôle la longueur de l'angle vif pour miterJoin

Lorsque le style Qt::MiterJoin est appliqué, il est possible d'utiliser la fonction setMiterLimit() pour spécifier la distance à laquelle la jonction d'onglet peut s'étendre à partir du point de jonction. La fonction miterLimit() est utilisée pour réduire les artefacts entre les jonctions de lignes lorsque les lignes sont presque parallèles.

La fonction miterLimit() doit être spécifiée en unités de la largeur de l'enclos, par exemple une limite d'onglet de 5 dans une largeur de 10 correspond à une longueur de 50 pixels. La limite d'onglet par défaut est de 2, c'est-à-dire deux fois la largeur du stylo en pixels.

L'exemple de tracé de chemin

L'exemple de tracé de chemin montre les motifs de tirets intégrés de Qt et montre comment les motifs personnalisés peuvent être utilisés pour étendre la gamme des motifs disponibles.

Voir également QPainter, QBrush, l'exemple de tracé de chemin et l'exemple de gribouillage.

Documentation sur les fonctions membres

QPen::QPen()

Construit un stylo noir à ligne pleine par défaut avec une largeur de 1.

QPen::QPen(Qt::PenStyle style)

Construit un stylo noir avec une largeur de 1 et la valeur donnée style.

Voir aussi setStyle().

QPen::QPen(const QColor &color)

Construit un stylo à ligne pleine avec une largeur de 1 et la valeur donnée color.

Voir aussi setBrush() et setColor().

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

Construit un stylo avec les styles spécifiés brush, width, stylo style, cap et join.

Voir aussi setBrush(), setWidth(), setStyle(), setCapStyle() et setJoinStyle().

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

Construit un stylo qui est une copie du stylo donné pen.

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

Construit un stylo qui est déplacé à partir de l'adresse pen.

Le stylo déplacé ne peut être qu'assigné, copié ou détruit. Toute autre opération (avant l'affectation) entraîne un comportement indéfini.

[noexcept] QPen::~QPen()

Détruit le stylo.

QBrush QPen::brush() const

Renvoie la brosse utilisée pour remplir les traits générés avec ce stylo.

Voir également setBrush().

Qt::PenCapStyle QPen::capStyle() const

Renvoie le style de capuchon du stylo.

Voir aussi setCapStyle() et Cap Style.

QColor QPen::color() const

Renvoie la couleur de la brosse de ce stylo.

Voir aussi brush() et setColor().

qreal QPen::dashOffset() const

Renvoie le décalage du tiret pour le stylo.

Voir aussi setDashOffset().

QList<qreal> QPen::dashPattern() const

Renvoie le motif de tirets de ce stylo.

Voir aussi setDashPattern(), style() et isSolid().

bool QPen::isCosmetic() const

Renvoie true si le stylo est cosmétique, sinon renvoie false.

Les stylos cosmétiques sont utilisés pour dessiner des traits qui ont une largeur constante, quelles que soient les transformations appliquées au site QPainter avec lequel ils sont utilisés. Le fait de dessiner une forme avec un stylo cosmétique garantit que son contour aura la même épaisseur à différents facteurs d'échelle.

Un stylo de largeur nulle est cosmétique par défaut.

Voir également setCosmetic() et widthF().

bool QPen::isSolid() const

Renvoie true si le stylo a un remplissage solide, sinon false.

Voir aussi style() et dashPattern().

Qt::PenJoinStyle QPen::joinStyle() const

Renvoie le style de jointure du stylo.

Voir aussi setJoinStyle() et Join Style.

qreal QPen::miterLimit() const

Renvoie la limite d'onglet du stylo. La limite d'onglet n'est pertinente que lorsque le style de jointure est défini sur Qt::MiterJoin.

Voir également setMiterLimit() et Join Style.

void QPen::setBrush(const QBrush &brush)

Définit la brosse utilisée pour remplir les traits générés avec ce stylo à l'adresse brush.

Voir également brush() et setColor().

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

Définit le style de capuchon du stylo à la valeur donnée style. La valeur par défaut est Qt::SquareCap.

Voir aussi capStyle() et Cap Style.

void QPen::setColor(const QColor &color)

Définit la couleur de la brosse de ce stylo à la valeur donnée color.

Voir également setBrush() et color().

void QPen::setCosmetic(bool cosmetic)

Définit ce stylo comme cosmétique ou non cosmétique, en fonction de la valeur de cosmetic.

Voir également isCosmetic().

void QPen::setDashOffset(qreal offset)

Définit le décalage du tiret (le point de départ du motif du tiret) pour ce stylo à l'adresse offset spécifiée. Le décalage est mesuré en termes d'unités utilisées pour spécifier le motif du tiret.

Par exemple, un motif dans lequel chaque trait a une longueur de quatre unités, suivi d'un espace de deux unités, commencera par le trait lorsqu'il sera dessiné comme une ligne.

Toutefois, si le décalage du tiret est fixé à 4,0, toute ligne tracée commencera par l'espace. Si le décalage est inférieur ou égal à 4,0, une partie du trait sera tracée en premier, et si le décalage est compris entre 4,0 et 6,0, la ligne commencera par une partie de l'espace.

Remarque : cette option convertit implicitement le style du stylo en Qt::CustomDashLine.

Voir également dashOffset().

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

Définit le motif du tiret pour ce stylo à la valeur donnée pattern. Cela convertit implicitement le style du stylo en Qt::CustomDashLine.

Le motif doit être spécifié sous la forme d'un nombre pair d'entrées positives où les entrées 1, 3, 5... sont les tirets et 2, 4, 6... sont les espaces. Par exemple, le motif du tiret est spécifié en unités positives :

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

Le motif du tiret est spécifié en unités de la largeur du stylo ; par exemple, un tiret de longueur 5 dans une largeur de 10 a une longueur de 50 pixels. Notez qu'un stylo de largeur nulle est équivalent à un stylo cosmétique d'une largeur de 1 pixel.

Chaque tiret est également soumis aux styles de capuchon. Ainsi, un tiret de 1 avec un capuchon carré s'étendra de 0,5 pixel dans chaque direction, ce qui donne une largeur totale de 2.

Notez que le style de chapeau par défaut est Qt::SquareCap, ce qui signifie que l'extrémité d'une ligne carrée couvre le point final et le dépasse de la moitié de la largeur de la ligne.

Voir également setStyle(), dashPattern(), setCapStyle() et setCosmetic().

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

Définit le style de jointure du stylo à la valeur donnée style. La valeur par défaut est Qt::BevelJoin.

Voir aussi joinStyle() et Join Style.

void QPen::setMiterLimit(qreal limit)

Fixe la limite d'onglet de ce stylo à la valeur donnée limit.

La limite d'onglet décrit la distance à laquelle une jonction d'onglet peut s'étendre à partir du point de jonction. Elle est utilisée pour réduire les artefacts entre les jonctions de lignes lorsque les lignes sont presque parallèles.

Cette valeur n'a d'effet que lorsque le style de stylo est défini sur Qt::MiterJoin. La valeur est spécifiée en unités de largeur du stylo, par exemple une limite d'onglet de 5 dans une largeur de 10 correspond à une longueur de 50 pixels. La limite d'onglet par défaut est de 2, c'est-à-dire deux fois la largeur du stylo en pixels.

Voir également miterLimit(), setJoinStyle() et Join Style.

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

Définit le style de stylo à l'adresse style.

Voir la documentation Qt::PenStyle pour une liste des styles disponibles. Depuis Qt XML 4.1, il est également possible de spécifier un motif de tiret personnalisé en utilisant la fonction setDashPattern() qui convertit implicitement le style du stylo en Qt::CustomDashLine.

Remarque : cette fonction remet le décalage du tiret à zéro.

Voir également style() et Pen Style.

void QPen::setWidth(int width)

Fixe la largeur du stylo à la valeur donnée width en pixels avec une précision entière.

Une largeur de ligne de zéro indique un stylo cosmétique. Cela signifie que la largeur du stylo est toujours d'un pixel de large, indépendamment de l'adresse transformation définie sur le peintre.

La définition d'une largeur de stylo avec une valeur négative n'est pas prise en charge.

Voir également setWidthF() et width().

void QPen::setWidthF(qreal width)

Fixe la largeur du stylo à la valeur donnée width en pixels avec une précision en virgule flottante.

Une largeur de ligne de zéro indique un stylo cosmétique. Cela signifie que la largeur du stylo est toujours d'un pixel de large, indépendamment de l'adresse transformation du peintre.

La définition d'une largeur de stylo avec une valeur négative n'est pas prise en charge.

Voir également setWidth() et widthF().

Qt::PenStyle QPen::style() const

Renvoie le style de stylo.

Voir aussi setStyle() et Pen Style.

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

Remplace ce stylo par other. Cette opération est très rapide et n'échoue jamais.

int QPen::width() const

Renvoie la largeur du stylo avec une précision entière.

Voir aussi setWidth() et widthF().

qreal QPen::widthF() const

Renvoie la largeur du stylo avec une précision en virgule flottante.

Voir aussi setWidthF() et width().

QPen::operator QVariant() const

Retourne le stylo sous forme de QVariant.

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

Renvoie true si le stylo est différent du stylo donné pen; sinon false. Deux stylos sont différents s'ils ont des styles, des largeurs ou des couleurs différents.

Voir aussi operator==().

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

Move-assigne other à cette instance QPen.

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

Affecte le site pen à ce stylo et renvoie une référence à ce stylo.

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

Fait de ce stylo un stylo solide avec la couleur donnée et les styles de capuchon et de jointure par défaut, et renvoie une référence à ce stylo.

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

Cette fonction a été introduite dans Qt 6.9.

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

Fait de ce stylo un stylo noir solide avec les styles de capuchon et de jointure par défaut, et renvoie une référence à ce stylo.

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

Cette fonction a été introduite dans Qt 6.9.

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

Renvoie true si le stylo est égal au stylo donné pen; sinon false. Deux stylos sont égaux s'ils ont les mêmes styles, largeurs et couleurs.

Voir aussi operator!=().

Non-membres apparentés

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

Écrit la donnée pen dans la donnée stream et renvoie une référence à stream.

Voir aussi Serializing Qt Data Types (Sérialisation des types de données Qt).

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

Lit un stylo de l'adresse stream dans l'adresse pen et renvoie une référence à l'adresse stream.

Voir aussi Serializing Qt Data Types (Sérialisation des types de données 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.