QRegion类
QRegion类指定了绘图的裁剪区域。更多信息...
头文件 | #include <QRegion> |
CMake | find_package(Qt6 REQUIRED COMPONENTS Gui) target_link_libraries(mytarget PRIVATE Qt6::Gui) |
qmake | QT += gui |
- 所有成员列表,包括继承成员
- QRegion是绘图类和隐式共享类的一部分。
公共类型
枚举 | 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_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 QRegion &r) const |
QRegion | intersected(const QRect &rect) const |
bool | intersects(const QRegion ®ion) const |
bool | intersects(const QRect &rect) const |
bool | isEmpty() const |
bool | isNull() const |
QRegion::const_reverse_iterator | rbegin() const |
int | rectCount() const |
QRegion::const_reverse_iterator | rend() const |
void | setRects(const QRect *rects, int number) |
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 QRegion &r) const |
QRegion | united(const QRect &rect) 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 QRegion &r) |
QRegion & | operator+=(const QRect &rect) |
QRegion | operator-(const QRegion &r) const |
QRegion & | operator-=(const QRegion &r) |
QRegion & | operator=(const QRegion &r) |
QRegion & | operator=(QRegion &&other) |
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) |
静态公共成员
(自 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。
成员类型文档
枚举 QRegion::RegionType
指定要创建的区域形状。
常量 | 值 | 描述 |
---|---|---|
QRegion::Rectangle | 0 | 区域覆盖整个矩形。 |
QRegion::Ellipse | 1 | 区域是矩形内的椭圆。 |
QRegion::const_iterator
该区域组成的非重叠矩形集的迭代器。
所有矩形的并集等于原始区域。
QRegion不提供可变迭代器。
QRegion::const_reverse_iterator
该区域的非重叠矩形集的逆迭代器。
所有矩形的并集等于原始区域。
QRegion不提供可变迭代器。
成员函数文档
QRegion::QRegion()
构造一个空的区域。
参见isEmpty()。
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::QRegion(const QPolygon &a, Qt::FillRule fillRule = Qt::OddEvenFill)
从点数组a根据填充分Qt::FillRule rules来构建多边形区域。
如果 fillRule 是 Qt::WindingFill,则多边形区域是通过 winding 算法定义的;如果它为 Qt::OddEvenFill,则使用奇偶填充算法。
警告:此构造函数可用于创建将使用时会导致绘制变慢的复杂区域。
QRegion::QRegion(const QBitmap &bm)
由位图 bm 构建区域。
所得到的区域由位图 bm 中 Qt::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。
所有矩形的并集等于原始区域。
[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 QRegion &r) const
返回与该区域和 r 交集的区域。
图示显示了两个椭圆区域的交集。
另请参阅 subtracted(),united() 和 xored()。
QRegion QRegion::intersected(const QRect &rect) const
返回与给定 rect 的区域和该区域的交集。
另请参阅 subtracted(),united() 和 xored()。
bool QRegion::intersects(const QRegion ®ion) 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。
所有矩形的并集等于原始区域。
void QRegion::setRects(const QRect *rects, int number)
使用由 rects 和 number 指定的矩形数组设置区域。矩形必须按 Y-X 顺序最好排序,并遵守以下限制
- 矩形不能相交。
- 所有具有给定顶边坐标的矩形必须具有相同的高度。
- 两个矩形不得水平相邻(在这种情况下应将它们合并为单个更宽的矩形)。
- 矩形必须按升序排序,以 Y 为主要排序键,以 X 为次要排序键。
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)
将区域沿 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 的并集。
该图显示了两个椭圆区域的总和。
另请参阅 intersected(相交)、subtracted(减去)和 xored(异或)。
QRegion QRegion::united(const QRect &rect) const
返回这个区域与指定的 rect 的并集。
另请参阅 intersected(相交)、subtracted(减去)和 xored(异或)。
QRegion QRegion::xored(const QRegion &r) const
返回一个区域,该区域为这个区域与 r 的异或(XOR)。
该图显示了两个椭圆区域的异或。
另请参阅 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() 函数应用于此区域和 r。 r1+r2
等价于 r1.united(r2)
。
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() 函数应用于此区域和 r。 r1-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() 函数应用于此区域和 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 运算符的格式。
© 2024 Qt Company Ltd. 本文档贡献者拥有各自的版权。此处提供的文档根据 Free Software Foundation 发布的 GNU 自由文档许可协议第 1.3 版 的条款许可。Qt 及其标志是芬兰以及/或全球其他国家的 The Qt Company Ltd. 的商标。所有其他商标均为各自所有者的财产。