このページでは

QPen Class

QPen クラスは、QPainter が図形の線や輪郭をどのように描画すべきかを定義しています。詳細...

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

パブリック関数

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)

詳細な説明

ペンには、style()、width()、brush()、capStyle()、joinStyle() があります。

ペンスタイルは線の種類を定義します。ブラシは、ペンで生成されたストロークを塗りつぶすために使用されます。塗りつぶしスタイルを指定するには、QBrush クラスを使用します。キャップスタイルは、QPainter を使用して描画できる線の端のキャップを決定し、ジョインスタイルは 2 本の線の接合部がどのように描画されるかを指定します。 ペンの幅は、整数(width())および浮動小数点(widthF())の両方の精度で指定できます。線の幅がゼロの場合は、装飾用ペンを示します。これは、ペインターに設定されたtransformation に関係なく、ペンの幅が常に1ピクセルで描画されることを意味します。

各種設定は、対応するsetStyle()、setWidth()、setBrush()、setCapStyle()、およびsetJoinStyle()関数を使用して簡単に変更できます(ペンのプロパティを変更する際は、ペインターのペンをリセットする必要があることに注意してください)。

例:

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

これは以下と同等です。

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

デフォルトのペンは、幅1の黒一色のブラシで、キャップスタイルはスクエア(Qt::SquareCap )、ジョインスタイルはベベル(Qt::BevelJoin )です。

さらに、QPen には、ペンのブラシの色を取得および設定するための便利関数として、それぞれcolor() およびsetColor() が用意されています。また、ペンの比較やストリーム処理も可能です。

描画全般に関する詳細については、Paint Systemのドキュメントを参照してください。

ペンのスタイル

Qt には、Qt::PenStyle 列挙型で表されるいくつかの組み込みスタイルが用意されています:

setStyle() 関数を使用するだけで、ペンスタイルを組み込みスタイルのいずれかに変換できます。ただし、後ほど詳しく説明するQt::CustomDashLine スタイルは例外です。スタイルをQt::NoPen に設定すると、ペインターは線や輪郭を描画しないように指示されます。デフォルトのペンスタイルはQt::SolidLine です。

Qt 4.1 以降では、setDashPattern() 関数を使用してカスタムダッシュパターンを指定することも可能になりました。この関数は、ペンのスタイルを暗黙的にQt::CustomDashLine に変換します。pattern 引数(QList )は、qreal のエントリを偶数個指定する必要があります。ここで、エントリ 1、3、5... がダッシュ、2、4、6…がスペースとなります。例えば、上記に示したカスタムパターンは、以下のコードを使用して作成されます:

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

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

pen.setDashPattern(dashes);

ダッシュのパターンはペンの幅単位で指定されることに注意してください。例えば、幅10のダッシュの長さが5の場合、その長さは50ピクセルになります。

現在設定されているダッシュパターンは、dashPattern() 関数を使用して取得できます。isSolid() 関数を使用すると、ペンに塗りつぶしがあるかどうかを確認できます。

キャップスタイル

キャップスタイルは、QPainter を使用して線の端点がどのように描画されるかを定義します。キャップスタイルは、幅が 1 以上の太い線にのみ適用されます。Qt::PenCapStyle 列挙型には、以下のスタイルが用意されています。

Qt::SquareCap スタイルは、線の端点を覆い、線の幅の半分だけ端点から突き出た正方形の線端です。Qt::FlatCap スタイルは、線の端点を覆わない正方形の線端です。また、Qt::RoundCap スタイルは、端点を覆う丸みを帯びた線端です。

デフォルトは `Qt::SquareCap` です。

ペン幅が 0 または 1 の場合に端点が描画されるかどうかは、キャップスタイルによって異なります。「Qt::SquareCap 」または「Qt::RoundCap 」を使用する場合は描画され、「Qt::FlatCap 」を使用する場合は描画されません。

結合スタイル

接続スタイルは、QPainter を使用して、2 本の接続された線間の接合部をどのように描画するかを定義します。接続スタイルは太い線、つまり幅が 1 以上の場合にのみ適用されます。Qt::PenJoinStyle 列挙型には、以下のスタイルが用意されています:

「Qt::BevelJoin 」スタイルは、2本の線の間にある三角形の切れ目を埋めます。「Qt::MiterJoin 」スタイルは、線を延長して斜めに交わるようにします。また、「Qt::RoundJoin 」スタイルは、2本の線の間を円弧で埋めます。

デフォルトは `Qt::BevelJoin` です。

miterLimit が miterJoin の鋭角部分の長さをどのように制御するかを示した図

Qt::MiterJoin スタイルが適用されている場合、setMiterLimit()関数を使用して、マイター接合が接合点からどの程度まで伸びるかを指定することができます。miterLimit()は、線がほぼ平行である場合の線接合部におけるアーティファクトを軽減するために使用されます。

miterLimit() は、ペンの幅を単位として指定する必要があります。例えば、幅 10 でのマイター制限が 5 の場合、長さは 50 ピクセルになります。デフォルトのマイター制限は 2 であり、これはピクセル単位でペンの幅の 2 倍に相当します。

ペンオプションを備えたパス描画アプリ「パスストローク」の例

「パスストローク」の例では、Qtに組み込まれているダッシュパターンを紹介するとともに、カスタムパターンを使用して利用可能なパターンの範囲を拡張する方法を示しています。

関連項目: QPainter 、QBrush 、パスストロークの例、およびスクライブの例。

メンバ関数のドキュメント

QPen::QPen()

幅1のデフォルトの黒の実線ペンを生成します。

QPen::QPen(Qt::PenStyle style)

幅1で、指定されたstyle を持つ黒いペンを生成します。

setStyle()も参照してください 。

QPen::QPen(const QColor &color)

幅 1、指定されたcolor を持つ実線のペンを生成します。

setBrush() およびsetColor()も参照してください 。

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

指定されたbrush 、width 、penstyle 、cap スタイルおよびjoin スタイルを持つペンを生成します。

setBrush()、setWidth()、setStyle()、setCapStyle()、およびsetJoinStyle()も参照してください 。

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

指定されたpen のコピーであるペンを作成します。

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

指定されたpen から移動されたペンを生成します。

moved-fromペンは、代入、コピー、または破棄のみが可能です。それ以外の操作(代入前)を行うと、未定義の挙動を引き起こします。

[noexcept] QPen::~QPen()

ペンを壊してしまう。

QBrush QPen::brush() const

このペンで生成されたストロークの塗りつぶしに使用されたブラシを返します。

setBrush()も参照してください 。

Qt::PenCapStyle QPen::capStyle() const

ペンのキャップのスタイルを返します。

setCapStyle() およびCap Styleも参照してください 。

QColor QPen::color() const

このペンのブラシの色を返します。

brush() およびsetColor()も参照してください 。

qreal QPen::dashOffset() const

ペンのダッシュオフセットを返します。

setDashOffset()も参照してください 。

QList<qreal> QPen::dashPattern() const

このペンのダッシュパターンを返します。

setDashPattern()、style()、およびisSolid()も参照してください 。

bool QPen::isCosmetic() const

ペンがコスメティックペンの場合は `true ` を返し、それ以外の場合は `false` を返します。

コスメティックペンは、使用されるQPainter にどのような変形が適用されても、幅が一定のままストロークを描画するために使用されます。コスメティックペンで図形を描画すると、異なる拡大率でもその輪郭の太さが一定に保たれます。

幅ゼロのペンは、デフォルトでコスメティックペンとして扱われます。

setCosmetic() およびwidthF()も参照してください 。

bool QPen::isSolid() const

ペンに単色の塗りつぶしがある場合は `true ` を返し、そうでない場合は `false` を返します。

style() およびdashPattern()も参照してください 。

Qt::PenJoinStyle QPen::joinStyle() const

ペンの結合スタイルを返します。

setJoinStyle() およびJoin Styleも参照してください 。

qreal QPen::miterLimit() const

ペンのマイター制限値を返します。マイター制限値は、接合スタイルが「Qt::MiterJoin 」に設定されている場合にのみ適用されます。

setMiterLimit() およびJoin Styleも参照してください 。

void QPen::setBrush(const QBrush &brush)

このペンで生成されたストロークの塗りつぶしに使用されるブラシを、指定されたbrush に設定します。

brush() およびsetColor()も参照してください 。

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

ペンのキャップのスタイルを、指定されたstyle に設定します。デフォルト値はQt::SquareCap です。

capStyle() およびCap Styleも参照してください 。

void QPen::setColor(const QColor &color)

このペンのブラシの色を、指定されたcolor に設定します。

setBrush() およびcolor()も参照してください 。

void QPen::setCosmetic(bool cosmetic)

cosmetic の値に応じて、このペンを「コスメティック」または「非コスメティック」に設定します。

isCosmetic()も参照してください 。

void QPen::setDashOffset(qreal offset)

このペンのダッシュオフセット(ダッシュパターンの開始点)を、指定されたoffset に設定します。オフセットは、ダッシュパターンの指定に使用される単位で測定されます。

オフセットが異なるダッシュパターンたとえば、各ストロークの長さが 4 単位で、その後に 2 単位の隙間が続くパターンの場合、線として描画されるとストロークから始まります。

しかし、ダッシュオフセットが 4.0 に設定されている場合、描画される線はすべて隙間から始まります。オフセットの値が 4.0 以下の場合は、ストロークの一部が最初に描画され、オフセットの値が 4.0 から 6.0 の間の場合は、線が隙間の部分から始まります。

注: これにより 、ペンのスタイルが暗黙的に `Qt::CustomDashLine` に変換されます。

dashOffset()も参照してください 。

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

このペンのダッシュパターンを、指定されたpattern に設定します。これにより、ペンのスタイルが暗黙的にQt::CustomDashLine に変換されます。

パターンは、偶数の正の要素として指定する必要があります。ここで、要素の1、3、5…がダッシュ、2、4、6…がスペースとなります。例:

カスタム破線
QPen pen;
QList<qreal> dashes;
qreal space = 4;
dashes << 1 << space << 3 << space << 9 << space
           << 27 << space << 9 << space;
pen.setDashPattern(dashes);

ダッシュパターンはペンの幅を単位として指定されます。例えば、幅 10 のペンで長さ 5 のダッシュは、50 ピクセルの長さになります。なお、幅が 0 のペンは、幅 1 ピクセルの装飾用ペンと同等であることに注意してください。

各ダッシュにはキャップスタイルも適用されるため、長さ1で角キャップが設定されたダッシュは、各方向に0.5ピクセルずつはみ出し、合計幅は2ピクセルになります。

なお、デフォルトのキャップスタイルはQt::SquareCap であり、これは四角い線端が終点を覆い、線幅の半分だけその外側に突き出ていることを意味します。

setStyle()、dashPattern()、setCapStyle()、およびsetCosmetic()も参照してください 。

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

ペンの接続スタイルを、指定されたstyle に設定します。デフォルト値はQt::BevelJoin です。

joinStyle() およびJoin Styleも参照してください 。

void QPen::setMiterLimit(qreal limit)

このペンのマイター制限を、指定されたlimit に設定します。

幅と「miterLimit」のラベルが付いたマイター接合

マイター制限は、マイター接合が接合点からどの程度まで伸びることができるかを指定します。これは、線がほぼ平行になっている線同士の接合部におけるアーティファクトを軽減するために使用されます。

この値は、ペンスタイルがQt::MiterJoin に設定されている場合にのみ有効です。値はペンの幅を単位として指定されます。例えば、幅10のペンでマイター制限を5に設定した場合、その長さは50ピクセルになります。デフォルトのマイター制限は2、つまりペンの幅の2倍(ピクセル単位)です。

miterLimit()、setJoinStyle()、およびJoin Styleも参照してください 。

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

ペンスタイルを指定されたstyle に設定します。

利用可能なスタイルの一覧については、Qt::PenStyle のドキュメントを参照してください。Qt 4.1以降では、setDashPattern()関数を使用してカスタムダッシュパターンを指定することも可能です。この関数は、ペンのスタイルを暗黙的にQt::CustomDashLine に変換します。

注:この関数は 、ダッシュのオフセットをゼロにリセットします。

関連項目: style() およびPen Style 。

void QPen::setWidth(int width)

ペン幅を、指定されたwidth をピクセル単位で、整数精度で設定します。

線幅が 0 の場合は、装飾用ペンを示します。これは、ペインターに設定されたtransformation に関係なく、ペン幅が常に 1 ピクセル幅で描画されることを意味します。

負の値でペン幅を設定することはサポートされていません。

setWidthF() およびwidth()も参照してください 。

void QPen::setWidthF(qreal width)

ペン幅を、指定されたwidth (ピクセル単位、浮動小数点精度)に設定します。

線幅が 0 の場合は、装飾用ペンを示します。これは、ペインターのtransformation にかかわらず、ペン幅が常に 1 ピクセル幅で描画されることを意味します。

負の値でペン幅を設定することはサポートされていません。

setWidth() およびwidthF()も参照してください 。

Qt::PenStyle QPen::style() const

ペンのスタイルを返します。

setStyle() およびPen Styleも参照してください 。

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

このペンをother と交換します。この操作は非常に高速で、失敗することはありません。

int QPen::width() const

ペンの幅を整数精度で返します。

setWidth() およびwidthF()も参照してください 。

qreal QPen::widthF() const

浮動小数点精度でペンの幅を返します。

setWidthF() およびwidth()も参照してください 。

QPen::operator QVariant() const

そのペンをQVariant として返します。

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

ペンが指定されたpen と異なる場合はtrue を返し、そうでない場合はfalseを返します。2つのペンが異なるスタイル、幅、または色を持っている場合、それらは異なるものとみなされます。

operator==()も参照してください 。

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

other をこのQPen インスタンスに割り当てます。

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

指定されたpen をこのペンに割り当て、このペンへの参照を返します。

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

このペンを、指定された色、デフォルトのキャップおよび接合スタイルを持つペンのインスタンスとして作成し、そのペンの参照を返します。

これはオーバーロードされた関数です。

この関数は Qt 6.9 で導入されました。

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

このペンを、デフォルトのキャップとジョイントスタイルを持つ実体の黒いペンにし、このペンへの参照を返します。

これはオーバーロードされた関数です。

この関数は Qt 6.9 で導入されました。

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

ペンが指定されたpen と等しい場合はtrue を返し、そうでない場合はfalseを返します。2つのペンが等しいとは、スタイル、幅、色がすべて等しい場合を指します。

operator!=()も参照してください 。

関連する非メンバー関数

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

指定されたpen を指定されたstream に書き込み、stream への参照を返します。

「Qt データ型のシリアライズ」も参照してください 。

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

指定されたstream から指定されたpen へペンを読み込み、stream への参照を返します。

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