QRegion Class

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

Header: #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)

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

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)

regionr と等しい新しい領域を構築します。

[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

領域を構成する、重なっていない矩形の端の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 の交点となる領域を返します。

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

与えられた region と等価な 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

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

p.x() をx 軸に沿って、p.y() を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

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

intersected()も参照

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

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

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

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

intersected()も参照

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

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

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

この領域とrunited() 関数を適用する。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)

この region とrunited() 関数を適用し、その結果をこの region に代入する。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 演算子の形式」も参照して ください。

本ドキュメントに含まれる文書の著作権は、それぞれの所有者に帰属します 本書で提供されるドキュメントは、Free Software Foundation が発行したGNU Free Documentation License version 1.3に基づいてライセンスされています。 Qtおよびそれぞれのロゴは、フィンランドおよびその他の国におけるThe Qt Company Ltd.の 商標です。その他すべての商標は、それぞれの所有者に帰属します。