//for starf study
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include<QDebug>
#include<QPainter>
#include<QPen>
#include<QBrush>
#include<QRect>
#include<QRegion>
//QRegion类为画家指定剪辑区域。
//QRegion与qPaint::setClipRegion()一起使用,将绘制区域限制为需要绘制的区域。
//QWidget::repaint()函数,它接受一个QRegion参数。QRegion是减少重新绘制所需更新屏幕面积的最佳工具。
//此类不适用于构造用于渲染的形状,尤其是作为轮廓。
//需要图形轮廓就使用QPainterPath创建路径和形状
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::paintEvent(QPaintEvent *)
{
QRegion r1(QRect(100, 100, 200, 80), QRegion::Ellipse); // 指定一个矩形的内切圆
QRegion r2(QRect(100, 120, 90, 30)); //指定一个矩形
//QRegion::QRegion(const QBitmap &bm) 从位图bm构造一个区域。 生成的区域由位图bm中的像素组成
//每个像素是一个1×1的矩形。
//QBitmap 可以由QPixmap构造生成
QRect rct = r1.boundingRect(); //返回此区域的边框。空区域给出的矩形为QRect::isNull()。
qDebug()<<rct;
qDebug()<<r1.contains(QPoint(101,101)); //contains用于包含判断 ,判断该点是否在区域内
//bool QRegion::contains(const QRect &r) const
QRegion inters;
inters = r1.intersected(r2);//返回一个区域,该区域是该区域和r的交点。
qDebug()<<inters;
//QRegion QRegion::intersected(const QRect &rect) const
qDebug()<<r1.intersects(r1);//如果此区域与区域相交,则返回true,否则返回false。
//bool QRegion::intersects(const QRect &rect) const
qDebug()<<r1.isEmpty(); //如果区域为空,则返回true;
//bool QRegion::isNull() const 等同 isEmpty
qDebug()<<r1.rectCount(); //返回此区域由多少个矩形组成。与end()-begin()相同。
QRect rcts[3];
rcts[0] = QRect(15,15,50,50);
rcts[1] = QRect(15,20,50,40);
rcts[2] = QRect(15,25,50,30);
r1.setRects(rcts, 3); //使用rects和number指定的矩形数组设置区域。矩形必须以最佳的Y-X排序,并遵循以下限制:
//矩形不能相交。
//具有给定顶坐标的所有矩形必须具有相同的高度。
//两个矩形不能水平邻接(在这种情况下,它们应组合成一个更宽的矩形)。
//矩形必须按升序排序,Y为主要排序键,X为次要排序键。
QRegion sub;
sub = r1.subtracted(r2); //返回从该区域中减去r的区域。
r1.swap(r2);//将其他地区与该地区互换。这个操作非常快,从来不会失败。
r1.swap(r2);
r1.translate(20,40); //沿X轴平移(移动)区域dx,沿Y轴平移(移动)区域dy。
//void QRegion::translate(const QPoint &point)
QRegion tran;
tran = r1.translated(30,40);//沿X轴平移(移动)区域dx,沿Y轴平移(移动)区域dy。构建新对象不改变就对象
//QRegion QRegion::translated(const QPoint &p) const
QRegion uni;
uni = r1.united(r2); //返回一个区域,该区域是该区域和r的并集。
//QRegion QRegion::united(const QRect &rect) const
QRegion xored;
xored = r1.xored(r2); //返回一个区域,该区域是该区域与r1的异或。
//一个区域可以看作是有多个矩形合并的,多个矩形被QRegion构造为数组
//所有矩形的并集等于原始区域。
QRegion::const_iterator itstart = r1.begin();//该迭代器指向组成该区域的非重叠矩形范围的开始。
//QRegion::const_iterator QRegion::cbegin() const 同 begin
//QRegion::const_reverse_iterator QRegion::crbegin() const 同 begin
//QRegion::const_reverse_iterator QRegion::rbegin() const 同 begin
QRegion::const_iterator itend = r1.end(); //该迭代器指向构成该区域的非重叠矩形的末尾。
//QRegion::const_iterator QRegion::cend() const 同 end
//QRegion::const_reverse_iterator QRegion::crend() const 同 end
//QRegion::const_reverse_iterator QRegion::rend() const 同 end
QPainter painter(this);
painter.setClipRegion(r1);
}
QRegion方法功能(5.12)
最新推荐文章于 2023-08-15 17:31:30 发布