一、描述
QRegion表示一个区域。QRegion与QPainter::setClipRegion()一起使用,可将绘制区域限制为需要绘制的区域。QRegion可用于限制重绘更新区域。
二、类型成员
1、QRegion::RegionType
- Rectangle:矩形
- Ellipse:椭圆
2、typedef QRegion::const_iterator。组成区域的非重叠矩形上的迭代器。所有矩形的并集等于原始区域(区域可以有多个区域组合而成)。
3、typedef QRegion::const_reverse_iterator。在组成区域的非重叠矩形上的反向迭代器。
三、成员函数
1、QRegion(const QBitmap &bm)
从位图构造一个区域。
如
这么一张位图(二值图)。此图构造区域后,其中的白色部分是不可绘制的,黑色部分是可以绘制的。例:
QPainter painter(this);
painter.setRenderHint(QPainter::Antialiasing,true);
painter.setPen(QPen(Qt::cyan, 3, Qt::DashDotLine));
QBitmap bitMap(":/D:/qqq.jpeg");
QRegion region(bitMap);
painter.setClipRegion(region);
painter.setBrush(Qt::blue);
painter.drawEllipse(QRect(0,0,200,300));
创建这样的复杂绘制区域会降低效率。
2、QRegion(const QPolygon &a, Qt::FillRule fillRule = Qt::OddEvenFill)
从多边形创建区域。
3、QRegion(const QRect &r, QRegion::RegionType t = Rectangle)
从矩形创建区域。
4、QRect boundingRect()
区域的外接矩形。
5、bool contains(const QPoint &p)
区域是否包含点。
6、bool contains(const QRect &r)
区域是否包含矩形。
7、QRegion intersected(const QRegion &r)
两区域的交集。
8、QRegion intersected(const QRect &rect)
区域和矩形的交集。
9、bool intersects(const QRegion ®ion)
区域是否和区域相交。
10、bool intersects(const QRect &rect)
区域是否和矩形相交。
11、bool isEmpty() const / bool isNull()
区域是否为空,空区域不含任何点。
12、int rectCount()
区域中的矩形个数。
QBitmap bitMap(":/D:/qqq.jpeg");
QRegion region(bitMap);
painter.setClipRegion(region);
painter.setBrush(Qt::blue);
painter.drawEllipse(QRect(0,0,200,300));
qDebug()<<"矩形个数"<<region.rectCount();
for (auto it = region.begin();it != region.end();++it)
{
qDebug()<<*it;
}
这个位图设置的区域是由一个个小的矩形组成的。
13、void setRects(const QRect *rects, int number)
使用由rects和number指定的矩形数组设置区域。
QPainter painter(this);
painter.setRenderHint(QPainter::Antialiasing,true);
painter.setPen(QPen(Qt::cyan, 3, Qt::DashDotLine));
QRegion region;
QRect rects [] = {QRect(20,20,100,200),QRect(20,300,100,100)};
region.setRects(rects,2);
painter.setClipRegion(region);
painter.setBrush(Qt::blue);
painter.drawRect(QRect(20,20,100,200));
painter.drawRect(QRect(20,300,100,100));
painter.setBrush(Qt::red);
painter.drawRect(QRect(20,100,400,250));
14、QRegion subtracted(const QRegion &r) const
获取两个区域的差集。
15、void QRegion::translate(const QPoint &point)
平移区域。
16、QRegion translated(const QPoint &p) const
获取平移后的副本。
17、QRegion united(const QRegion &r)
QRegion united(const QRect &rect)
获取并集。
18、QRegion xored(const QRegion &r)
获取对称差集。