このページでは

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
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()(排他的論理和)を使用して、単純なリージョンを組み合わせることで、複雑なリージョンを作成できます。translate() を使用して、リージョンを移動できます。

領域がisEmpty()であるか、あるいはcontains()でQPoint またはQRect であるかどうかをテストできます。境界矩形はboundingRect()で取得できます。

その領域を反復処理(begin()、end()、または範囲指定ループを使用)することで、領域を矩形に分割することができます。

複雑な領域の使用例:

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×1 の長方形であるかのように扱われます。

このコンストラクタは、使用時に描画速度を低下させるような複雑な領域を作成する場合があります。なお、マスクされたピクマップの描画は、QPixmap::setMask() を使用することで、はるかに高速に行うことができます。

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

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

fillRule がQt::WindingFill の場合、多角形領域はワインディングアルゴリズムを使用して定義されます。Qt::OddEvenFill の場合、奇数・偶数塗りつぶしアルゴリズムが使用されます。

警告:この コンストラクタを使用すると、使用時に描画速度を低下させるような複雑な領域が生成される可能性があります。

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

長方形または楕円形の領域を作成します。

t がRectangle の場合、領域は塗りつぶされた長方形(x,y,w,h )となります。t がEllipse の場合、領域は中心が(x +w / 2,y +h / 2)、サイズが(w,h)の塗りつぶされた楕円となります。

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

r の矩形を基に、領域タイプを「t 」として領域を作成します。

矩形が不正な場合、null の領域が作成されます。

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

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

QRegion::QRegion(const QRegion &r)

r に等しい新しい領域を作成します。

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

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

その領域を構成する、互いに重ならない矩形の末尾の1つ先を指す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 の交差領域を返します。

地域の交点

図は、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

その領域を構成する、互いに重ならない矩形の範囲を返します。この範囲は、この領域に対して変更を伴う(非const)メソッドが次に呼び出されるまで有効です。

すべての矩形の和集合は、元の領域と等しくなります。

注:この関数は Qt 5 にも存在しましたが、その場合は `QVector<QRect>` を返していました。

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

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

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

その領域を構成する、互いに重ならない矩形の範囲の末尾の1つ先を指す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 を差し引いた領域を返します。

領域の差分

図は、左側の楕円から右側の楕円を差し引いた結果を示しています(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)

領域dx を X 軸方向に、dy を Y 軸方向に変位(移動)させます。

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 の和集合となる領域を返します。

地域連合

図は、2つの楕円領域の和集合を示しています。

intersected()、subtracted()、およびxored()も参照してください 。

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

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

XOR処理された領域

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

intersected()、united()、およびsubtracted()も参照してください 。

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&r2 は、r1.intersected(r2) と同等です。

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

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

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

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

この領域に対して関数 `intersected()` を適用し、`r ` を行い、その結果をこの領域に代入します。`r1&=r2 ` は、`r1 = r1.intersected(r2)` と同等です。

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

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

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

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

この領域に対して、united() 関数を適用し、r を行います。r1+r2 は、r1.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+=r2 は、r1 = r1.united(r2) と同等です。

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

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

この領域に対して、subtracted() 関数を適用し、r を実行します。r1-r2 は、r1.subtracted(r2) と同等です。

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

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

この領域に対して関数 `subtracted()` を適用し、`r ` を行い、その結果をこの領域に代入します。`r1-=r2 ` は `r1 = r1.subtracted(r2)` と同等です。

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

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

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^r2 は、r1.xored(r2) と同等です。

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

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

この領域に対してxored()関数を適用し、r を行い、その結果をこの領域に代入します。r1^=r2 は、r1 = r1.xored(r2) と同等です。

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

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

この領域に対して、united() 関数を適用し、r を行います。r1|r2 は、r1.united(r2) と同等です。

united() およびoperator+()も参照してください 。

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

この領域にunited()関数を適用し、r を行い、その結果をこの領域に代入します。r1|=r2 は、r1 = r1.united(r2) と同等です。

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

関連する非メンバー

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

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

「QDataStream 演算子の形式」も参照してください 。

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

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

「QDataStream 演算子の形式」も参照してください 。

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