class QRegion#

QRegion 类指定了画笔的剪辑区域。更多...

摘要摘要

方法方法

注意

此文档可能包含从C++自动翻译到Python的代码片段。我们始终欢迎对代码片段翻译的贡献。如果您发现翻译有问题,您也可以通过在https://bugreports.qt.io/projects/PYSIDE上创建问题来让我们知道

详细描述#

警告

本节包含从C++自动翻译到Python的代码片段,可能包含错误。

QRegionsetClipRegion() 结合使用,用于限制绘图区域到需要绘制的部分。此外,还有 QWidget::repaint() 函数,它接受一个 QRegion 参数。使用 QRegion 可以最小化刷新屏幕区域的数量。

该类不适合用于构建渲染的形状,特别是作为轮廓。使用 QPainterPath 创建路径和形状,用于与 QPainter 结合使用。

QRegion 是一个隐式共享类。

创建和区域的使用#

可以从矩形、椭圆、多边形或位图中创建区域。通过使用 united()intersected()subtracted()xored() (异或)组合简单区域来创建复杂区域。你可以通过使用 translate() 移动区域。

你可以测试一个区域是否为空或它是否包含一个 QRegion 或一个 QRect。边界矩形可以通过 boundingRect() 找到。

遍历区域(使用 begin()end() 或范围循环)将区域分解为矩形。

使用复杂区域的示例

def paintEvent(self, arg__0):

    QRegion r1(QRect(100, 100, 200, 80), // r1: elliptic region
               QRegion.Ellipse)
    QRegion r2(QRect(100, 120, 90, 30)) # r2: rectangular region
    r3 = r1.intersected(r2) # r3: intersection
    painter = QPainter(self)
    painter.setClipRegion(r3)
    # ...                                  // paint clipped graphics
class RegionType#

指定要创建的区域形状。

常量

描述

QRegion.Rectangle

该区域覆盖整个矩形。

QRegion.Ellipse

该区域是矩形内部的椭圆。

__init__(bitmap)#
参数:

bitmapQBitmap

从位图 bm 构造一个区域。

得到的区域由位图 bm 中的 Qt::color1 像素组成,每个像素相当于一个 1x1 的矩形。

这个构造函数可能会创建复杂的区域,当使用时会慢化绘图过程。注意,使用 setMask() 可以快速绘制带遮罩的像素图。

__init__()

构造一个空区域。

另请参阅

isEmpty()

__init__(x, y, w, h[, t=QRegion.RegionType.Rectangle])
参数:
  • x – int

  • y – int

  • w – int

  • h – int

  • tRegionType

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

如果 tRectangle,则该区域是填充的矩形(x, y, w, h)。如果 tEllipse,则该区域是以(x + w / 2, y + h / 2)为中心,尺寸为(w, h)的填充椭圆。

__init__(region)
参数:

regionQRegion

构建一个与区域 r 相等的新区域。

__init__(pa[, fillRule=Qt.OddEvenFill])
参数:

使用点数组 a 和通过 fillRule 指定的填充规则,构建多边形区域。

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

警告

此构造函数可用于创建复杂区域,当使用时可能会减慢绘图速度。

__init__(r[, t=QRegion.RegionType.Rectangle])
参数:

这是一个重载函数。

基于矩形 r 和区域类型 t 创建区域。

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

另请参阅

RegionType

__getitem__()#
__len__()#
begin()#
返回类型::

QRect

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

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

另请参阅

rbegin() cbegin() end()

boundingRect()#
返回类型::

QRect

返回此区域的边界矩形。空区域给出的是 QRect::isNull() 的矩形。

cbegin()#
返回类型::

QRect

begin() 相同。

cend()#
返回类型::

QRect

end() 相同。

contains(r)#
参数:

rQRect

返回类型::

bool

这是一个重载函数。

如果区域与矩形 r 交叉,则返回 true;否则返回 false

contains(p)
参数:

pQPoint

返回类型::

bool

如果区域包含点 p,则返回 true;否则返回 false

end()#
返回类型::

QRect

返回一个指向区域组成的不重叠矩形的末尾之后的 const_iterator

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

另请参阅

rend() cend() begin()

intersected(r)#
参数:

rQRect

返回类型::

QRegion

返回一个区域,它是此区域和给定的 rect 的交集。

intersected(r)
参数:

rQRegion

返回类型::

QRegion

返回一个区域,它是此区域和 r 的交集。

../../_images/rintersect.png

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

intersects(r)#
参数:

rQRect

返回类型::

bool

如果此区域与 rect 交叉,则返回 true,否则返回 false

intersects(r)
参数:

rQRegion

返回类型::

bool

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

isEmpty()#
返回类型::

bool

警告

本节包含从C++自动翻译到Python的代码片段,可能包含错误。

如果区域为空,则返回 true;否则返回 false。空区域是不包含任何点的一个区域。

示例

r1 = QRegion(10, 10, 20, 20)
r1.isEmpty() # false
r3 = QRegion()
r3.isEmpty() # true
r2 = QRegion(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
isNull()#
返回类型::

bool

如果该区域为空,则返回true;否则返回false。空区域是不包含任何点的区域。此函数与isEmpty

另请参阅

isEmpty()

__ne__(r)#
参数:

rQRegion

返回类型::

bool

如果此区域与另一个区域不同,则返回true;否则返回false

__and__(r)#
参数:

rQRegion

返回类型::

QRegion

intersected()函数应用于此区域和rr1&r2r1.intersected(r2)等价。

另请参阅

intersected()

__and__(r)
参数:

rQRect

返回类型::

QRegion

这是一个重载函数。

__mul__m(#
参数:

mQTransform

返回类型::

QRegion

__add__(r)#
参数:

rQRect

返回类型::

QRegion

这是一个重载函数。

__add__(r)
参数:

rQRegion

返回类型::

QRegion

united()函数应用于此区域和rr1+r2等价于r1.united(r2)

另请参阅

united() 运算符|

__iadd__(r)#
参数:

rQRect

返回类型::

QRegion

返回一个区域,它是此区域与指定的rect区域联合的结果。

另请参阅

united()

__iadd__(r)
参数:

rQRegion

返回类型::

QRegion

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

另请参阅

intersected()

__sub__(r)#
参数:

rQRegion

返回类型::

QRegion

subtracted()函数应用到当前区域和代码r上。表达式r1-r2等价于r1.subtracted(r2)

另请参阅

subtracted()

__isub__(r)#
参数:

rQRegion

返回类型::

QRegion

subtracted()函数应用到当前区域和代码r上,并将结果赋值给当前区域。表达式r1 -= r2等价于r1 = r1.subtracted(r2)

另请参阅

subtracted()

__eq__(r)#
参数:

rQRegion

返回类型::

bool

如果区域等于r,则返回true,否则返回false

__xor__(r)#
参数:

rQRegion

返回类型::

QRegion

xored()函数应用到当前区域和代码r上。表达式r1^r2等价于r1.xored(r2)

另请参阅

xored()

__ixor__(r)#
参数:

rQRegion

返回类型::

QRegion

xored()函数应用到当前区域和代码r上,并将结果赋值给当前区域。表达式r1 ^= r2等价于r1 = r1.xored(r2)

另请参阅

xored()

__or__(r)#
参数:

rQRegion

返回类型::

QRegion

united()函数应用到当前区域和代码r上。表达式r1|r2等价于r1.united(r2)

另请参阅

united() 运算符 operator+()

__ior__(r)#
参数:

rQRegion

返回类型::

QRegion

将该区域和 r 应用 united() 函数,并将结果赋值给该区域。 r1|=r2r1 = r1.united(r2) 等效。

另请参阅

united()

rectCount()#
返回类型::

int

返回该区域由多少个矩形组成。等同于 end() - begin()

setRects(rect, num)#
参数:

使用由 rectsnumber 指定的矩形数组设置区域。矩形必须进行最优的 Y-X 排序,并遵循以下限制:

  • 矩形不得相交。

  • 所有具有给定顶部坐标的矩形必须有相同的高度。

  • 两个矩形不得水平相邻(在这种情况下,应将其合并为单个更宽的矩形)。

  • 矩形必须按升序排序,以 Y 作为主要排序键,以 X 作为次要排序键。

subtracted(r)#
参数:

rQRegion

返回类型::

QRegion

返回一个从该区域减去 r 的区域。

../../_images/rsubtract.png

图中显示将右侧的椭圆从中减去左侧椭圆的结果(left - right)。

swap(other)#
参数:

other - QRegion

将区域 other 与该区域交换。此操作非常快速且从不失败。

translate(p)#
参数:

pQPoint

这是一个重载函数。

将区域沿 X 轴和 Y 轴相对于当前位置平移 point .x()point .y()。正值将区域移动到右侧和下方。

平移到指定的 point

translate(dx, dy)
参数:
  • dx – int

  • dy – int

沿X轴平移(移动)dx和沿Y轴平移dy的区域。

translated(p)#
参数:

pQPoint

返回类型::

QRegion

这是一个重载函数。

返回一个区域的副本,该副本沿X轴相对于当前位置平移p .x(),沿Y轴相对于当前位置平移p .y()。正数值将矩形向右和向下移动。

另请参阅

translate()

translated(dx, dy)
参数:
  • dx – int

  • dy – int

返回类型::

QRegion

返回一个区域副本,沿X轴平移dx,沿Y轴平移dy,相对于当前位置。正数值将区域向右和向下移动。

另请参阅

translate()

united(r)#
参数:

rQRect

返回类型::

QRegion

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

united(r)
参数:

rQRegion

返回类型::

QRegion

返回一个区域,该区域是此区域和r的并集。

../../_images/runion.png

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

xored(r)#
参数:

rQRegion

返回类型::

QRegion

返回一个区域,该区域是此区域和r的异或(XOR)。

../../_images/rxor.png

图示显示两个椭圆区域的异或。