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
QVariant operator QVariant() const
bool operator!=(const QPen &pen) const
QPen &operator=(QPen &&other)
QPen &operator=(const QPen &pen)
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()) の両方の精度で指定できます。線幅0は化粧ペンを示します。これは、ペインターで設定された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() 便利関数を提供して、それぞれペンのブラシの色を抽出および設定します。ペンの比較やストリームも可能です。

一般的なペイントの詳細については、ペイントシステムのドキュメントを参照してください。

ペンのスタイル

Qt では、Qt::PenStyle enum で表されるいくつかの組み込みスタイルを提供しています:

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

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

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 enum は以下のスタイルを提供します:

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

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

ペン幅が 0 か 1 のときに端点が描画されるかどうかは、キャップスタイルに依存します。Qt::SquareCap またはQt::RoundCap では描画され、Qt::FlatCap では描画されません。

結合ス タ イル

結合スタイルは、QPainter を使って、2 つの連結線間の結合をどのように描画するかを定義します。結合ス タ イ ルは幅の広い線にのみ、 すなわち幅が 1 以上の場合にのみ適用 さ れます。Qt::PenJoinStyle enum には以下のス タ イ ルがあ り ます:

Qt::BevelJoin ス タ イ ルは、 2 本の線の間の三角形の切 り 落 と し を塗 り ます。Qt::MiterJoin スタイルは、線が斜めに交わるように伸ばします。また、Qt::RoundJoin スタイルは、2本の線の間に円弧を描きます。

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

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

miterLimit() はペンの幅単位で指定する必要があります。例えば、幅 10 のマイターリミット 5 は 50 ピクセルの長さになります。デフ ォル ト のマ イ タ リ ミ ッ ト は 2 で、 すなわちペ ン幅の 2 倍 (ピ ク セル単位) です。

パス描画の例

パス描画の例では、Qt 組み込みのダッシュパターンを示し、利用可能なパターンの範囲を拡張するためにカスタムパターンをどのように使用できるかを示しています。

QPainter,QBrush,Path Stroking Example,Scribble Exampleも参照してください

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

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)

指定されたbrushwidth 、ペンstylecap スタイル、join スタイルを持つペンを構築します。

setBrush()、setWidth()、setStyle()、setCapStyle()、setJoinStyle()も参照

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

与えられたpen のコピーであるペンを構築する。

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

与えられたpen から移動されるペンを構築する。

移動元のペンは、代入、コピー、破棄のみが可能です。それ以外の操作(代入の前)は未定義の動作につながります。

[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 に設定します。

マ イ タ ー リ ミ ッ ト は、 マ イ タ ー結合が結合点か ら ど の程度拡張で き る か を示 し ます。こ れは、 線が平行に近 い線結合の間のア ーテ ィ フ ァ ク ト を軽減す る ために用い ら れます。

こ の値は、 ペ ン ス タ イ ルがQt::MiterJoin に設定 さ れてい る と き にのみ効力を持ち ます。 こ の値はペ ンの幅を単位 と し て指定 さ れます。デフォルトのマイターリミットは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 に設定する。

線幅ゼロは化粧ペンを示します。これは、ペインター上の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()も参照

QVariant QPen::operator QVariant() const

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

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

ペンが与えられたpen と異なる場合はtrue を返し、そうでない場合は false を返す。2つのペンが異なるのは、スタイル、幅、色が異なる場合です。

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

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

Move-other をこのQPen インスタンスに割り当てる。

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

与えられたpen をこのペンに割り当て、このペンへの参照を返します。

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 データ型のシリアライズも参照してください

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