QRegion方法功能(5.12)


//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);
}




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值