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() 配合使用,可将喷涂区域限制在需要喷涂的范围内。此外,还有一个QWidget::repaint() 函数接受一个 QRegion 参数。QRegion 是最小化重绘所需更新的屏幕区域的最佳工具。

该类不适合构建用于渲染的形状,尤其是轮廓。请使用QPainterPath 创建路径和形状,以便与QPainter 一起使用。

QRegion 是一个隐式共享类。

创建和使用区域

区域可以由矩形、椭圆、多边形或位图创建。通过使用united(),intersected(),subtracted() 或xored() (排他或)组合简单区域,可以创建复杂区域。您可以使用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 乘 1 的矩形。

此构造函数可能会创建复杂的区域,使用时会减慢绘制速度。请注意,使用QPixmap::setMask() 绘制屏蔽像素图的速度要快得多。

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

根据fillRule 指定的填充规则,从点数组a 构建一个多边形区域。

如果fillRuleQt::WindingFill ,则使用缠绕算法定义多边形区域;如果是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)

这是一个重载函数。

以矩形r 为基础创建一个区域,区域类型为t

如果矩形无效,将创建一个空区域。

另请参阅 QRegion::RegionType

QRegion::QRegion(const QRegion &r)

构建一个新的区域,等于区域r

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

移动-从other 区域构建一个新区域。调用后,other 为空。

另请参阅 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 相交的区域。

区域交叉点

图中显示了两个椭圆区域的交点。

另请参见 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

返回构成该区域的非重叠矩形的跨度。在下一次调用该区域的变异(非常数)方法之前,该跨度一直有效。

所有矩形的联合等于原始区域。

注: 此函数在 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 排序,并遵守以下限制:

  • 矩形不得相交。
  • 所有具有给定顶坐标的矩形必须具有相同的高度。
  • 不得有两个矩形水平相交(在这种情况下,应将它们合并为一个更宽的矩形)。
  • 矩形必须按升序排序,Y 为主要排序键,X 为次要排序键。

注: 由于历史原因,rects.size() 必须小于INT_MAX (请参阅rectCount())。

此函数在 Qt 6.8 中引入。

另请参阅 rects()。

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

Returns a region which isr subtracted from this region.返回从该区域减去的区域。

区域减法

图中显示了右边的椭圆与左边的椭圆相减后的结果 (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)

这是一个重载函数。

相对于当前位置,沿 x 轴平移point.x()区域,沿 y 轴平移point.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 的结合区域。

地区联盟

图中显示的是两个椭圆区域的结合。

另请参见 intersected()、subtracted() 和xored()。

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

返回该区域与r 的排他或(XOR)区域。

区域 XORed

图中显示了两个椭圆区域的排他或。

另请参见 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() 函数应用于该区域和rr1&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() 函数应用于该区域和rr1+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() 函数应用于该区域和rr1-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)

Move-assignsother 到此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() 函数应用于该区域和rr1^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() 函数应用于该区域和rr1|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 操作符的格式

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