QRegion Class
QRegion 类用于为绘图器指定一个裁剪区域。更多内容...
| 头文件: | #include <QRegion> |
| CMake: | find_package(Qt6 REQUIRED COMPONENTS Gui) target_link_libraries(mytarget PRIVATE Qt6::Gui) |
| qmake: | QT += gui |
- 所有成员的列表,包括继承的成员
- 已弃用的成员
- QRegion 属于“绘图类”和“隐式共享类”。
公共类型
| 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 ®ion) 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()` 配合使用,可将绘制区域限制在需要绘制的范围内。此外,还有 `QWidget::repaint()` 函数,该函数接受一个 QRegion 参数。QRegion 是最大限度减少重绘时需要更新的屏幕区域的最佳工具。
该类不适用于构建用于渲染的图形,尤其是轮廓。请使用QPainterPath 来创建路径和图形,以便与QPainter 配合使用。
QRegion 是一个隐式共享类。
区域的创建与使用
区域可以基于矩形、椭圆、多边形或位图创建。可以通过使用united()、intersected()、subtracted()或xored()(异或)组合简单区域来创建复杂区域。您可以使用translate()移动区域。
您可以检测区域是否为isEmpty() 类型,或者它是否contains() 属于QPoint 或QRect 类型。可以通过boundingRect() 获取其边界矩形。
对该区域进行迭代(使用begin()、end( 或范围 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::Rectangle | 0 | 该区域覆盖整个矩形。 |
QRegion::Ellipse | 1 | 该区域是矩形内的一个椭圆。 |
QRegion::const_iterator
一个遍历构成该区域的、互不重叠的矩形的迭代器。
所有矩形的并集等于原始区域。
QRegion 不提供可变迭代器。
QRegion::const_reverse_iterator
一个遍历构成该区域的互不重叠矩形的反向迭代器。
所有矩形的并集等于原始区域。
QRegion 不提供可变迭代器。
成员函数文档
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 。
如果该矩形无效,则将创建一个空区域。
这是一个重载函数。
另请参阅 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
返回一个const_iterator ,该指针指向构成该区域的、互不重叠的矩形区域末尾之后的一个位置。
所有矩形的并集等于原始区域。
[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 ®ion) 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(); // falsebool 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 6.8 中引入。
另请参阅 setRects()。
[noexcept] QRegion::const_reverse_iterator QRegion::rend() const
返回一个const_reverse_iterator ,其指针指向构成该区域的、互不重叠的矩形范围末尾之后的一个位置。
所有矩形的并集等于原始区域。
[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
返回一个区域,该区域等于此区域减去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 的并集。

图中显示了两个椭圆形区域的并集。
另请参阅 intersected()、subtracted()和xored()。
QRegion QRegion::xored(const QRegion &r) const
返回一个区域,该区域是本区域与r 的异或(XOR)结果。

图中展示了两个椭圆区域的异或运算结果。
另请参阅 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) 。
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 通过Move操作赋值给此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) 。
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.