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




  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Qt 5.12是Qt开发框架的一个版本,特别支持Android平台。Qt是一个跨平台的应用程序开发框架,可以用于开发各种类型的应用程序,包括移动应用。而Android是一个广泛使用的移动操作系统。 使用Qt 5.12开发Android应用有几个优势。首先,Qt提供了一套统一的API和工具,可以方便地在不同平台上进行开发和调试。这意味着开发人员只需要编写一次代码,即可在多个平台上运行应用程序,节省了开发时间和工作量。 其次,Qt提供了许多现成的模块和类库,可以帮助开发人员实现各种功能,如图形界面、网络通信、数据库操作等。这样,开发人员可以更加专注于应用的业务逻辑,而无需关心底层的细节。 另外,Qt还支持许多常用的开发语言,包括C++、QML等。这样,开发人员可以使用自己熟悉的语言来开发应用程序,提高开发效率。 此外,Qt 5.12还具备了一些针对Android平台的特性。例如,它可以使用Android原生接口,并提供了一些Android专用的功能模块,如推送通知、位置服务等。这样,开发人员可以充分发挥Android平台的特性,并为用户提供更好的体验。 总而言之,Qt 5.12是一个功能强大的开发框架,可以帮助开发人员轻松地将应用程序移植到Android平台。它提供了统一的API和工具、现成的模块和类库、支持多种语言等优势,可以大大简化开发过程,并提高开发效率。 ### 回答2: Qt 5.12是一种跨平台的开发框架,可以用于创建各种类型的应用程序,包括移动应用。特别是在针对Android平台进行开发时,Qt 5.12具有很多有吸引力的特性。 首先,Qt 5.12提供了丰富的UI组件库,使得开发者可以轻松地创建现代和精美的用户界面。这些组件可以被自定义和个性化,以满足不同应用的需求。 其次,Qt 5.12还提供了强大的跨平台能力。开发者可以使用相同的代码库在多个平台上部署应用程序,包括Android和iOS。这样可以减少开发时间和成本,并且简化了应用程序的维护。 此外,Qt 5.12还提供了与Android生态系统的无缝集成。开发者可以直接访问Android平台的功能和服务,如传感器、摄像头和位置服务。这使得开发者能够充分利用Android平台所提供的功能,为用户提供更全面的应用体验。 另外,Qt 5.12对性能和内存管理进行了优化,这对于在移动设备上运行的应用程序尤为重要。通过优化的渲染引擎和低内存消耗的特性,Qt 5.12能够在Android设备上提供流畅的用户体验。 总的来说,Qt 5.12是一个强大的开发框架,特别适用于在Android平台上构建应用程序。它提供了丰富的UI组件,具有跨平台能力,并与Android生态系统无缝集成。随着移动设备的普及,使用Qt 5.12进行Android开发将成为一种流行的选择。 ### 回答3: QT 5.12 是一个跨平台的应用程序开发框架,它支持在多个操作系统上开发应用程序,包括 Android。 在 QT 5.12 中,它引入了一些新的功能和改进,以提高在 Android 平台上的开发体验。首先,QT 5.12 支持在 Android 8.0 及以上版本的系统上开发应用程序。它还支持在 ARM 设备上使用 Qt Quick 控件,并且可以通过调整渲染器设置来提高应用程序的性能。 此外,QT 5.12 还支持在 Android 上使用其他功能,如 OpenGL ES、SQLite、音频和视频。它还提供了对 Android 应用程序包 (APK) 的支持,可以通过 QT Creator 构建和部署应用程序。 在 QT 5.12 中,还提供了一些工具和插件,以简化在 Android 上开发的过程。例如,QT 5.12 提供了一个命令行工具 androiddeployqt,用于将 QT 应用程序部署到 Android 设备上。它还包括了一个插件 Qt Android Extras,用于访问 Android 平台上的一些额外功能,如传感器和位置服务。 总的来说,QT 5.12 提供了一个全面的开发环境,使开发者能够在 Android 平台上构建功能丰富的应用程序。无论是在界面设计、图形渲染还是与 Android 系统交互方面,QT 5.12 都提供了广泛的支持和便利的开发工具。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值