QRegion Class

QRegionクラスはペインターのクリップ領域を指定します。詳細...

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

パブリック型

enum RegionType { Rectangle, Ellipse }
const_iterator
const_reverse_iterator

パブリック関数

QRegion()
QRegion(const QBitmap &bm)
QRegion(const QPolygon &a, Qt::FillRule fillRule = Qt::OddEvenFill)
QRegion(int x, int y, int w, int h, QRegion::RegionType t = Rectangle)
QRegion(const QRect &r, QRegion::RegionType t = Rectangle)
QRegion(const QRegion &r)
QRegion(QRegion &&other)
QRegion::const_iterator begin() const
QRect boundingRect() const
QRegion::const_iterator cbegin() const
QRegion::const_iterator cend() const
bool contains(const QPoint &p) const
bool contains(const QRect &r) const
QRegion::const_reverse_iterator crbegin() const
QRegion::const_reverse_iterator crend() const
QRegion::const_iterator end() const
QRegion intersected(const QRect &rect) const
QRegion intersected(const QRegion &r) const
bool intersects(const QRect &rect) const
bool intersects(const QRegion &region) const
bool isEmpty() const
bool isNull() const
QRegion::const_reverse_iterator rbegin() const
int rectCount() const
(since 6.8) QSpan<const QRect> rects() const
QRegion::const_reverse_iterator rend() const
(since 6.8) void setRects(QSpan<const QRect> rects)
QRegion subtracted(const QRegion &r) const
void swap(QRegion &other)
(since 6.0) HRGN toHRGN() const
void translate(int dx, int dy)
void translate(const QPoint &point)
QRegion translated(int dx, int dy) const
QRegion translated(const QPoint &p) const
QRegion united(const QRect &rect) const
QRegion united(const QRegion &r) const
QRegion xored(const QRegion &r) const
QVariant operator QVariant() const
bool operator!=(const QRegion &other) const
QRegion operator&(const QRegion &r) const
QRegion operator&(const QRect &r) const
QRegion &operator&=(const QRegion &r)
QRegion &operator&=(const QRect &r)
QRegion operator+(const QRegion &r) const
QRegion operator+(const QRect &r) const
QRegion &operator+=(const QRect &rect)
QRegion &operator+=(const QRegion &r)
QRegion operator-(const QRegion &r) const
QRegion &operator-=(const QRegion &r)
QRegion &operator=(QRegion &&other)
QRegion &operator=(const QRegion &r)
bool operator==(const QRegion &r) const
QRegion operator^(const QRegion &r) const
QRegion &operator^=(const QRegion &r)
QRegion operator|(const QRegion &r) const
QRegion &operator|=(const QRegion &r)

静的パブリックメンバ

(since 6.0) QRegion fromHRGN(HRGN hrgn)
QDataStream &operator<<(QDataStream &s, const QRegion &r)
QDataStream &operator>>(QDataStream &s, QRegion &r)

詳しい説明

QRegion は、QPainter::setClipRegion() と共に使用され、描画領域を描画が必要なものに限定します。QRegion パラメータを受け取るQWidget::repaint() 関数もあります。QRegionは、再描画によって更新される画面領域を最小限に抑えるための最良のツールです。

このクラスは、レンダリング用の図形、特にアウトラインの作成には適していません。QPainter で使用するパスやシェイプを作成するにはQPainterPath を使用してください。

QRegionは暗黙の共有クラスです。

リージョンの作成と使用

リージョンは矩形、楕円、多角形、ビットマップから作成できます。複雑なリージョンは、united(),intersected(),subtracted(),xored() (exclusive or) を使って単純なリージョンを組み合わせて作成することができます。リージョンはtranslate() で移動できます。

領域がisEmpty() かどうか、あるいはcontains() がQPointQRect かどうかを調べることができます。 境界矩形はboundingRect() で見つけることができます。

begin(),end(), またはranged-forループで)領域を繰り返し処理すると、領域が矩形に分解されます。

複合領域の使用例:

void MyWidget::paintEvent(QPaintEvent *)
{
    QRegion r1(QRect(100, 100, 200, 80),    // r1: elliptic region
               QRegion::Ellipse);
    QRegion r2(QRect(100, 120, 90, 30));    // r2: rectangular region
    QRegion r3 = r1.intersected(r2);        // r3: intersection

    QPainter painter(this);
    painter.setClipRegion(r3);
    // ...                                  // paint clipped graphics
}

QPainter::setClipRegion(),QPainter::setClipRect(),QPainterPathも参照

メンバ型ドキュメント

enum QRegion::RegionType

作成する領域の形状を指定する。

定数説明
QRegion::Rectangle0領域が矩形全体を覆う。
QRegion::Ellipse1領域は矩形内の楕円。

QRegion::const_iterator

リージョンを構成する重なり合わない矩形に対するイテレータ。

すべての矩形の和は元の領域に等しい。

QRegion は変更可能なイテレータを提供しません。

begin() およびend()も参照してください

QRegion::const_reverse_iterator

領域を構成する重なり合わない矩形に対する逆イテレータ。

すべての矩形の和は元の領域に等しくなります。

QRegion は変更可能なイテレータを提供しません。

rbegin() およびrend()も参照

メンバ関数ドキュメント

QRegion::QRegion()

空の領域を構築します。

isEmpty()も参照してください

QRegion::QRegion(const QBitmap &bm)

ビットマップbm から領域を構築する。

その結果、領域はビットマップbm のピクセルから構成され、Qt::color1 、あたかも各ピクセルが 1 x 1 の矩形であるかのようになります。

このコンストラクタを使用すると、描画が遅くなる複雑な領域が作成される可能性があります。マスクされた pixmap の描画は、QPixmap::setMask() を使用した方がはるかに高速であることに注意してください。

QRegion::QRegion(const QPolygon &a, Qt::FillRule fillRule = Qt::OddEvenFill)

fillRule で指定された塗りつぶしルールで、点配列a から多角形領域を構築する。

fillRuleQt::WindingFill の場合,多角形領域は winding アルゴリズムを用いて定義され,Qt::OddEvenFill の場合,奇偶塗り潰しアルゴリズムが用いられる.

警告 このコンストラクタは、複雑な領域を作成するために使用することができ、使用すると描画が遅くなります。

QRegion::QRegion(int x, int y, int w, int h, QRegion::RegionType t = Rectangle)

矩形領域または楕円領域を構築する。

tRectangle の場合、 領域は塗りつぶされた矩形 (x,y,w,h) となる。tEllipse の場合、領域は塗りつぶされた楕円で、中心は (x +w / 2,y +h / 2)、サイズは (w,h) です。

QRegion::QRegion(const QRect &r, QRegion::RegionType t = Rectangle)

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

領域タイプt を持つ矩形r に基づいて領域を作成する。

矩形が無効な場合は null 領域が作成されます。

QRegion::RegionTypeも参照してください

QRegion::QRegion(const QRegion &r)

領域r に等しい新しい領域を構築する。

[noexcept] QRegion::QRegion(QRegion &&other)

Move-リージョンother から新しいリージョンを構築する。呼び出し後、other はnullになる。

isNull()も参照のこと

[noexcept] QRegion::const_iterator QRegion::begin() const

領域を構成する重なり合わない矩形の範囲の先頭を指すconst_iterator を返します。

すべての矩形の和は元の領域に等しい。

rbegin()、cbegin() およびend()も参照

[noexcept] QRect QRegion::boundingRect() const

こ の領域の外接矩形を返 し ます。空の領域はQRect::isNull() の矩形を返します。

[noexcept] QRegion::const_iterator QRegion::cbegin() const

begin() と同じ。

[noexcept] QRegion::const_iterator QRegion::cend() const

end() と同じ。

bool QRegion::contains(const QPoint &p) const

領域が点p を含んでいればtrue を返し、そうでなければfalse を返す。

bool QRegion::contains(const QRect &r) const

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

領域が矩形r に重なる場合はtrue を返し、重ならない場合はfalse を返します。

[noexcept] QRegion::const_reverse_iterator QRegion::crbegin() const

rbegin() と同じ。

[noexcept] QRegion::const_reverse_iterator QRegion::crend() const

rend() と同じ。

[noexcept] QRegion::const_iterator QRegion::end() const

領域を構成する重なり合わない矩形の端のひとつ先を指すconst_iterator を返します。

すべての矩形の和は元の領域に等しい。

rend()、cend()、begin()も参照

[static, since 6.0] QRegion QRegion::fromHRGN(HRGN hrgn)

与えられたhrgn と等価なQRegion を返します。

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

QRegion QRegion::intersected(const QRect &rect) const

この領域と与えられたrect の交点となる領域を返す。

subtracted(),united(),xored()も参照

QRegion QRegion::intersected(const QRegion &r) const

この領域とr の交点となる領域を返す。

Region Intersection

図は2つの楕円領域の交点を示す。

subtracted(),united(),xored()も参照

bool QRegion::intersects(const QRect &rect) const

この領域がrect と交差している場合はtrue を返し、そうでない場合はfalse を返す。

bool QRegion::intersects(const QRegion &region) const

この領域がregion と交差している場合はtrue を返し、そうでない場合はfalse を返す。

bool QRegion::isEmpty() const

領域が空の場合はtrue を返し、そうでない場合はfalse を返す。空の領域は、点を含まない領域である。

QRegion r1(10, 10, 20, 20);
r1.isEmpty();               // false

QRegion r3;
r3.isEmpty();               // true

QRegion r2(40, 40, 20, 20);
r3 = r1.intersected(r2);    // r3: intersection of r1 and r2
r3.isEmpty();               // true

r3 = r1.united(r2);         // r3: union of r1 and r2
r3.isEmpty();               // false

bool QRegion::isNull() const

領域が空の場合はtrue を返し、そうでない場合はfalse を返す。空の領域は、点を含まない領域である。この関数はisEmpty

isEmpty()も参照

[noexcept] QRegion::const_reverse_iterator QRegion::rbegin() const

領域を構成する重なり合わない矩形の範囲の先頭を指すconst_reverse_iterator を返します。

すべての矩形の和は元の領域に等しい。

begin()、crbegin() およびrend()も参照

[noexcept] int QRegion::rectCount() const

この領域が構成する矩形の数を返す。end() - begin() と同じ。

[noexcept, since 6.8] QSpan<const QRect> QRegion::rects() const

リージョンを構成する重なり合わない矩形のスパンを返します。このスパンは、次にこの領域に対して mutating (non-const) メソッドを呼び出すまで有効です。

すべての矩形の和は元の領域に等しい。

注: この関数は Qt 5 にも存在しましたが、代わりにQVector<QRect> を返していました。

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

setRects()も参照してください

[noexcept] QRegion::const_reverse_iterator QRegion::rend() const

領域を構成する重なり合わない矩形の範囲の終端のひとつ先を指すconst_reverse_iterator を返します。

すべての矩形の和は元の領域に等しい。

end()、crend()、rbegin()も参照

[since 6.8] void QRegion::setRects(QSpan<const QRect> rects)

rects で指定された矩形の配列を使用して領域を設定します。矩形は最適に Y-X ソートされ、以下の制約に従わなければならない

  • 矩形は交差してはいけません。
  • 与えられた上端座標を持つすべての矩形は、同じ高さを持たなければなりません。
  • 2つの矩形が水平に接することは許されない(その場合は、1つの広い矩形にまとめられるべきである)。
  • 矩形は昇順にソートされなければならず、Yをメジャーソートキー、Xをマイナーソートキーとする。

注意: 歴史的な理由により、rects.size()INT_MAX よりも小さくなければなりません(rectCount() を参照)。

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

rects()も参照してください

QRegion QRegion::subtracted(const QRegion &r) const

この領域からr を引いた領域を返す。

Region Subtraction

図は、左の楕円から右の楕円を引いた結果を示している (left - right)。

intersected(),united(),xored()も参照

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

この領域をother と入れ替える。この操作は非常に高速で、失敗することはない。

[since 6.0] HRGN QRegion::toHRGN() const

与えられた領域と等価な HRGN を返します。

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

void QRegion::translate(int dx, int dy)

領域を X 軸に沿ってdx 、Y 軸に沿ってdy 移動する。

void QRegion::translate(const QPoint &point)

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

領域point.x()を x 軸に沿って、point.y() をy 軸に沿って、現在の位置から相対的に移動します。正の値は、領域を右と下に移動します。

与えられたpoint に変換します。

QRegion QRegion::translated(int dx, int dy) const

現在の位置を基準として、x 軸に沿ってdx に、y 軸に沿ってdy に移動した領域のコピーを返す。正の値を指定すると、領域は右と下に移動します。

translate()も参照してください

QRegion QRegion::translated(const QPoint &p) const

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

現在の位置から x 軸方向にp.x()、y 軸方向にp.y()変換した矩形のコピーを返します。正の値を指定すると、矩形は右と下に移動します。

translate()も参照してください

QRegion QRegion::united(const QRect &rect) const

この領域と与えられたrect の和である領域を返す。

intersected(),subtracted(),xored()も参照

QRegion QRegion::united(const QRegion &r) const

この領域とr の和である領域を返す。

Region Union

図は2つの楕円領域の和を示す。

intersected(),subtracted(),xored()も参照

QRegion QRegion::xored(const QRegion &r) const

この領域とr の排他的論理和(XOR)をとる領域を返す。

Region XORed

図は2つの楕円領域の排他的論理和を示している。

intersected(),united(),subtracted()も参照

QVariant QRegion::operator QVariant() const

領域をQVariant

bool QRegion::operator!=(const QRegion &other) const

この地域がother 地域と異なる場合はtrue を返し、そうでない場合はfalse を返す。

QRegion QRegion::operator&(const QRegion &r) const

intersected() 関数をこの領域とr に適用する。r1&r2r1.intersected(r2) と等価。

intersected()も参照

QRegion QRegion::operator&(const QRect &r) const

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

QRegion &QRegion::operator&=(const QRegion &r)

intersected() 関数をこの領域とr に適用し、結果をこの領域に代入する。r1&=r2r1 = r1.intersected(r2) と等価である。

intersected()も参照

QRegion &QRegion::operator&=(const QRect &r)

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

QRegion QRegion::operator+(const QRegion &r) const

united() 関数をこの領域とr に適用する。r1+r2r1.united(r2) と等価。

united() およびoperator|()も参照のこと

QRegion QRegion::operator+(const QRect &r) const

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

QRegion &QRegion::operator+=(const QRect &rect)

この領域と指定されたrect との和である領域を返す。

united()も参照

QRegion &QRegion::operator+=(const QRegion &r)

united() 関数をこの領域とr に適用し、結果をこの領域に割り当てる。r1+=r2r1 = r1.united(r2) と等価。

intersected()も参照

QRegion QRegion::operator-(const QRegion &r) const

subtracted() 関数をこの領域とr に適用する。r1-r2r1.subtracted(r2) と等価。

subtracted()も参照

QRegion &QRegion::operator-=(const QRegion &r)

subtracted() 関数をこの領域とr に適用し、結果をこの領域に割り当てる。r1-=r2r1 = r1.subtracted(r2) と等価。

subtracted()も参照

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

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

QRegion &QRegion::operator=(const QRegion &r)

この領域にr を割り当て、領域への参照を返す。

bool QRegion::operator==(const QRegion &r) const

領域がr に等しければtrue を返し、そうでなければ false を返す。

QRegion QRegion::operator^(const QRegion &r) const

xored() 関数をこの領域とr に適用する。r1^r2r1.xored(r2) と等価。

xored()も参照

QRegion &QRegion::operator^=(const QRegion &r)

xored() 関数をこの領域とr に適用し、結果をこの領域に割り当てる。r1^=r2r1 = r1.xored(r2) と等価。

xored()も参照

QRegion QRegion::operator|(const QRegion &r) const

united() 関数をこの領域とr に適用する。r1|r2r1.united(r2) と等価。

united() およびoperator+()も参照のこと

QRegion &QRegion::operator|=(const QRegion &r)

united() 関数をこの領域とr に適用し、結果をこの領域に割り当てる。r1|=r2r1 = r1.united(r2) と等価。

united()も参照

関連する非会員

QDataStream &operator<<(QDataStream &s, const QRegion &r)

領域r をストリームs に書き込み、ストリームへの参照を返します。

QDataStream 演算子のフォーマットも参照してください

QDataStream &operator>>(QDataStream &s, QRegion &r)

ストリームs から領域をr に読み込み、ストリームへの参照を返します。

QDataStream 演算子のフォーマットも参照してください

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