QRegion类

QRegion类指定了绘图的裁剪区域。更多信息...

头文件 #include <QRegion>
CMakefind_package(Qt6 REQUIRED COMPONENTS Gui)
target_link_libraries(mytarget PRIVATE Qt6::Gui)
qmakeQT += gui

公共类型

枚举RegionType { Rectangle, Ellipse }
const_iterator
const_reverse_iterator

公共函数

QRegion()
QRegion(int x, int y, int w, int h, QRegion::RegionType t = Rectangle)
QRegion(const QRect &r, QRegion::RegionType t = Rectangle)
QRegion(const QPolygon &a, Qt::FillRule fillRule = Qt::OddEvenFill)
QRegion(const QBitmap &bm)
QRegion(const QRegion &r)
QRegion(QRegion &&other)
QRegion::const_iteratorbegin() const
QRectboundingRect() const
QRegion::const_iteratorcbegin() const
QRegion::const_iteratorcend() const
boolcontains(const QPoint &p) const
boolcontains(const QRect &r) const
QRegion::const_reverse_iteratorcrbegin() const
QRegion::const_reverse_iteratorcrend() const
QRegion::const_iteratorend() const
QRegionintersected(const QRegion &r) const
QRegionintersected(const QRect &rect) const
boolintersects(const QRegion &region) const
boolintersects(const QRect &rect) const
boolisEmpty() const
boolisNull() const
QRegion::const_reverse_iteratorrbegin() const
intrectCount() const
QRegion::const_reverse_iteratorrend() const
voidsetRects(const QRect *rects, int number)
QRegionsubtracted(const QRegion &r) const
voidswap(QRegion &other)
(since 6.0) HRGNtoHRGN() const
voidtranslate(int dx, int dy)
voidtranslate(const QPoint &point)
QRegiontranslated(int dx, int dy) const
QRegiontranslated(const QPoint &p) const
QRegionunited(const QRegion &r) const
QRegionunited(const QRect &rect) const
QRegionxored(const QRegion &r) const
QVariantoperator QVariant() const
booloperator!=(const QRegion &other) const
QRegionoperator&(const QRegion &r) const
QRegionoperator&(const QRect &r) const
QRegion &operator&=(const QRegion &r)
QRegion &operator&=(const QRect &r)
QRegionoperator+(const QRegion &r) const
QRegionoperator+(const QRect &r) const
QRegion &operator+=(const QRegion &r)
QRegion &operator+=(const QRect &rect)
QRegionoperator-(const QRegion &r) const
QRegion &operator-=(const QRegion &r)
QRegion &operator=(const QRegion &r)
QRegion &operator=(QRegion &&other)
booloperator==(const QRegion &r) const
QRegionoperator^(const QRegion &r) const
QRegion &operator^=(const QRegion &r)
QRegionoperator|(const QRegion &r) const
QRegion &operator|=(const QRegion &r)

静态公共成员

(自 6.0) QRegionfromHRGN(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()或者范围-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::setClipRegionQPainter::setClipRectQPainterPath

成员类型文档

枚举 QRegion::RegionType

指定要创建的区域形状。

常量描述
QRegion::Rectangle0区域覆盖整个矩形。
QRegion::Ellipse1区域是矩形内的椭圆。

QRegion::const_iterator

该区域组成的非重叠矩形集的迭代器。

所有矩形的并集等于原始区域。

QRegion不提供可变迭代器。

参见begin() 和 end()。

QRegion::const_reverse_iterator

该区域的非重叠矩形集的逆迭代器。

所有矩形的并集等于原始区域。

QRegion不提供可变迭代器。

参见rbegin() 和 rend()。

成员函数文档

QRegion::QRegion()

构造一个空的区域。

参见isEmpty()。

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

构造一个矩形或椭圆区域。

如果tRectangle,区域是填充矩形(xywh)。如果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 QPolygon &a, Qt::FillRule fillRule = Qt::OddEvenFill)

从点数组a根据填充分Qt::FillRule rules来构建多边形区域。

如果 fillRuleQt::WindingFill,则多边形区域是通过 winding 算法定义的;如果它为 Qt::OddEvenFill,则使用奇偶填充算法。

警告:此构造函数可用于创建将使用时会导致绘制变慢的复杂区域。

QRegion::QRegion(const QBitmap &bm)

由位图 bm 构建区域。

所得到的区域由位图 bmQt::color1 的像素组成,就像每个像素都是一个 1×1 的矩形。

此构造函数可能会创建复杂区域,使用时会导致绘制变慢。请注意,使用 QPixmap::setMask() 进行遮罩像素绘图可以更快完成。

QRegion::QRegion(const QRegion &r)

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

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

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

另请参阅:isNull

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

返回一个指向区域组成的非重叠矩形范围开始位置的 const_iterator。

所有矩形的并集等于原始区域。

另请参阅:rbegincbeginend

[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 QRegion &r) const

返回与该区域和 r 交集的区域。

Region Intersection

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

另请参阅 subtracted(),united() 和 xored()。

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

返回与给定 rect 的区域和该区域的交集。

另请参阅 subtracted(),united() 和 xored()。

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

如果该区域与 region 交叉,返回 true;否则返回 false

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

如果该区域与 rect 交叉,返回 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] QRegion::const_reverse_iterator QRegion::rend() const

返回一个指向构成区域的非重叠矩形的范围的末尾之后的const_reverse_iterator

所有矩形的并集等于原始区域。

另请参阅 end(),crend(),和rbegin()。

void QRegion::setRects(const QRect *rects, int number)

使用由 rectsnumber 指定的矩形数组设置区域。矩形必须按 Y-X 顺序最好排序,并遵守以下限制

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

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)

这是一个重载函数。

将区域沿 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

这是一个重载函数。

返回对齐于当前位置按照 p.x() 沿x轴和 p.y() 沿y轴移动的区域的副本。

另请参阅 translate()。

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

返回这个区域与 r 的并集。

Region Union

该图显示了两个椭圆区域的总和。

另请参阅 intersected(相交)、subtracted(减去)和 xored(异或)。

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

返回这个区域与指定的 rect 的并集。

另请参阅 intersected(相交)、subtracted(减去)和 xored(异或)。

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

返回一个区域,该区域为这个区域与 r 的异或(XOR)。

Region 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

将此区域和 r 应用 intersected(相交)函数。r1 & r2 等价于 r1.intersected(r2)。

另请参阅 intersected

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

这是一个重载函数。

将此区域和 r 应用 intersected(相交)函数并将结果赋值给此区域。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 QRegion &r)

united() 函数应用于此区域和 r,并将结果赋给此区域。 r1+=r2 等价于 r1 = r1.united(r2)

另请参阅 intersected

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

返回一个区域,此区域是此区域与指定的 rect 的并集。

另请参阅united

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

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

r 赋值给此区域并返回对区域的引用。

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

移动赋值 other 到此 QRegion 实例。

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 运算符的格式

© 2024 Qt Company Ltd. 本文档贡献者拥有各自的版权。此处提供的文档根据 Free Software Foundation 发布的 GNU 自由文档许可协议第 1.3 版 的条款许可。Qt 及其标志是芬兰以及/或全球其他国家的 The Qt Company Ltd. 的商标。所有其他商标均为各自所有者的财产。