QRect所有方法功能(QT5.12)

#include "mainwindow.h"
#include "ui_mainwindow.h"

#include<QDebug>

#include<QRect>
#include <QPoint>
MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    //QRect类使用整数在平面上精确定义一个矩形。
    QRect rc = QRect(100,100,200,150); //构造函数有几个重载
                                                             //输入左上角坐标和右下角坐标(QPoint)
                                                             //输入左上角坐标和一个QSize的对象表示尺寸
    qDebug()<<rc;   //QRect(100,100 200x150)  void QRect::adjust(int dx1, int dy1, int dx2, int dy2)
    rc.adjust(5,6,0,0);   //前两个参数直接修改左上角的值 即topLeft.x() + dx1,topLeft.y() + dy1
    qDebug()<<rc; //QRect(105,106 195x144) 矩形左上角被修改,但是右下角不变 所以矩形实际上缩小了
    rc.adjust(0,0,5,6); //后两个参数修改右下角坐标位置 将其平移和左上角一样的距离
    qDebug()<<rc;  //QRect(105,106 200x150)  右下角被扯大 面积变大
    QRect adjust = rc.adjusted(-10,-10,10,10);  //adjusted 不修改原本的矩形;返回一个新的矩形 adjust修改原本矩形
    qDebug()<<adjust;
    QRect num = QRect(10,10,150,200);

    qDebug()<<num.bottomLeft()<<num.bottomRight()<<num.center(); //返回矩形左下角,右下角,中心的坐标
    qDebug()<<num.contains(QPoint(10,10))<<num.contains(QPoint(10,10), true); //包含查询函数  打印:true false
                                                            //第二个参数不填或者为false,第一个参数所表示的点在矩形内部或者边缘都返回true
                                                            //第二个参数为true,则第一个参数必须完全存在矩形内部才可以返回true
                                                            //参数有几个重载  参数1可以是一个Rect 的矩形,判断方式一样
                                                            //参数1可以是两个int,代表坐标的x,y 判断规则一样
    int x1,y1,x2,y2,width,height;
    num.getCoords(&x1,&y1,&x2,&y2);
    qDebug()<<x1<<y1<<x2<<y2;   //函数获取矩形左上角坐标和右下角坐标
    num.getRect(&x1,&y1,&width,&height);
    qDebug()<<x1<<y1<<width<<height;   //函数获取矩形左上角坐标尺寸(w,h)
    qDebug()<<num.height();  //返回矩形高度
    qDebug()<<num.intersected(rc); //返回矩形和给定矩形的相交的部分(也是一个矩形,返回类型为QRect)
    qDebug()<<num.intersects(rc); // 如果两个矩形存在相交部分(边线有重合部分也算),那么返回true

     qDebug()<<num.bottom(); //函数返回矩形左上角y值 + 矩形高度 - 1 (这个减一是QT bug需要手动修正)返回矩形底部框的y值
     qDebug()<<num.left(); // 返回矩形左侧框的x值
     qDebug()<<num.top(); //返回矩形上边缘的y坐标
     qDebug()<<num.right(); //返回矩形右边缘的x值 此函数返回left()+width()-1 (属于QTbug 需要手动修正)

    qDebug()<<num.isEmpty(); //判断是否是空矩形,判断条件是  left() > right() || top() > bottom()
    qDebug()<<num.isNull(); //矩形存在判断,判断条件是 right() == left() - 1 && bottom() == top() - 1
    qDebug()<<num.isValid();  //判断是否有效矩形 有效矩形满足条件  left() <= right() && top() <= bottom()

    QRect addMargin = num.marginsAdded(QMargins(5,2,5,2));  //返回增加外边距之后的矩形
    qDebug()<< addMargin<<num.center()<<addMargin.center();          //增加的时候,中心不变
    QRect remMargin = num.marginsRemoved(QMargins(5,2,5,2)); //返回去掉外边距之后的矩形
    qDebug()<<remMargin<<num.center()<<remMargin.center(); ;  //缩小的时候,中心不变
    qDebug()<<num;
    num.moveBottom(300); //垂直移动矩形,将矩形的底边保留在给定的y坐标处。矩形的大小不变。
    qDebug()<<num;
    num.moveBottomLeft(QPoint(15,250)); //移动矩形,将左下角保留在给定位置。矩形的大小不变。
    qDebug()<< num;
    num.moveBottomRight(QPoint(190,250)); //移动矩形,将右下角保留在给定位置。矩形的大小不变。
    qDebug()<< num;
    num.moveCenter(QPoint(200,200)); //移动矩形,使中心点保持在给定位置。矩形的大小不变。
    qDebug()<< num;

    num.moveLeft(80); //水平移动矩形,将矩形的左边缘保留在给定的x坐标处。矩形的大小不变。
    qDebug()<<num;
    num.moveRight(500); //水平移动矩形,将矩形的右边缘保留在给定的x坐标处。矩形的大小不变。
    qDebug()<<num;
    num.moveTo(10,10); //移动矩形,将左上角保留在给定位置(x,y)。矩形的大小不变。
    qDebug()<<num;
    num.moveTop(20); //垂直移动矩形,将矩形的上边缘保留在给定的y坐标处。矩形的大小不变。
    qDebug()<<num;
    num.moveTopLeft(QPoint(10,10)); //移动矩形,将左上角保留在给定位置。矩形的大小不变。
    qDebug()<<num;
    num.moveTopRight(QPoint(500,500));//移动矩形,将右上角保留在给定位置。矩形的大小不变。
    qDebug()<<num;

    QRect normal = num.normalized(); //返回一个标准化的矩形;具有非负宽度和高度的矩形,如果width()<0,则该函数交换左右角,如果height()<0,则交换顶角和底角。
    qDebug()<<normal;

    normal.setBottom(510);//将矩形的底边设置为给定的y坐标。永远不会更改矩形的上边缘。所以矩形会在Y轴方向上被拉伸
    qDebug()<<normal;
    normal.setBottomLeft(QPoint(200,550)); //将矩形的左下角设置为给定位置。永远不会更改矩形的右上角,所以矩形会向左下角拉伸
    //void QRect::setBottomRight(const QPoint &position)  矩形向右下角拉伸,左上角固定
    //void QRect::setLeft(int x)  将矩形的左边缘设置为给定的x坐标。矩形向左侧拉伸,右侧固定
    //void QRect::setRight(int x) 将矩形的右边侧的横坐标设置为给定的x坐标,矩形向右侧拉伸,左侧固定
    //void QRect::setTop(int y) 将矩形的顶部的纵坐标设置为给定的Y坐标,矩形向上方拉伸,底部固定
    //void QRect::setTopLeft(const QPoint &position) 矩形向左上角拉伸,右下角固定
    //void QRect::setTopRight(const QPoint &position) 矩形向左上角拉伸,右下角固定
    //void QRect::setX(int x) 将矩形的左边缘设置为给定的x坐标。矩形向左侧拉伸,右侧固定
    //void QRect::setY(int y)将矩形的上边缘设置为给定的y坐标。矩形向上方拉伸,下侧固定

    normal.setCoords(10,12,110,112); //将矩形左上角设置为(10,10),右下角设置为(110,112)
    normal.setHeight(80); //将矩形的高度设置为给定高度。底部边缘已更改,但顶部边缘未更改。
    normal.setWidth(140); //将矩形的宽度设置为给定宽度。右侧边缘被改动,左侧边缘不动
    normal.setRect(10,10,150,200); //重新设置矩形的位置和尺寸
    normal.setSize(QSize(120,170)); //将矩形设置为给定大小 左上角位置不变

    QSize sz = normal.size(); //返回矩形的尺寸信息

   QPoint topLeft =  normal.topLeft(); //返回矩形左上角坐标
   //QPoint QRect::topRight() const  返回矩形右上角坐标

   qDebug()<<normal;
   normal.translate(10,15); //平移矩形,参数1表示横坐标移动的距离,参数2表示纵坐标移动的距离
   qDebug()<<normal;
   normal.translate(QPoint(10,10));//平移函数的重载 平移参数为offset的横坐标和纵坐标
   qDebug()<<normal;
   //QRect QRect::translated(int dx, int dy)  和上面的类型,也有同样的重载,不会移动原本的矩形,而是返回一个新的矩形
   QRect tran = normal.transposed();  //更换矩形的长和宽  左上角不变
    qDebug()<<tran;
    QRect unit = normal.united(rc); //返回矩形和给定矩形的边框矩形(就是刚刚好能把两个矩形包裹起来的一个大矩形)

    qDebug()<<normal.width(); //返回矩形的宽度
    //int QRect::x() const   返回矩形左边缘的x坐标。相当于left()。
    //int QRect::y() const   返回矩形上边缘的y坐标。相当于top()。
}

MainWindow::~MainWindow()
{
    delete ui;
}


  • 4
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一段使用Qt5.12.12绘制播放音乐动态直方图的源代码: ```cpp #include <QtWidgets> class MusicWidget : public QWidget { public: MusicWidget(QWidget *parent = nullptr) : QWidget(parent) { setFixedSize(400, 300); } void setAudioData(const QVector<double> &data) { audioData = data; update(); } protected: void paintEvent(QPaintEvent *event) override { Q_UNUSED(event); QPainter painter(this); painter.setRenderHint(QPainter::Antialiasing); int columnWidth = width() / audioData.size(); // 绘制直方图 for (int i = 0; i < audioData.size(); ++i) { int columnHeight = height() * audioData[i]; QPoint topLeft(i * columnWidth, height() - columnHeight); QColor columnColor(Qt::red); columnColor.setAlphaF(0.5); painter.setBrush(columnColor); painter.drawRect(QRect(topLeft, QSize(columnWidth, columnHeight))); } } private: QVector<double> audioData; }; int main(int argc, char *argv[]) { QApplication app(argc, argv); // 生成随机音频数据 QVector<double> audioData; for (int i = 0; i < 100; ++i) { double value = qrand() / static_cast<double>(RAND_MAX); audioData.append(value); } MusicWidget musicWidget; musicWidget.setAudioData(audioData); musicWidget.show(); return app.exec(); } ``` 这段代码创建了一个名为`MusicWidget`的QWidget子类,用于绘制动态直方图。在构造函数中,设置了窗口的固定大小。`setAudioData`函数用于设置音频数据,当音频数据改变时,调用`update`函数触发重新绘制。 在`paintEvent`函数中,通过QPainter类进行绘制操作。首先,设置了绘制抗锯齿效果。然后,根据音频数据的大小,计算出每个直方图列的宽度。接着,使用循环遍历音频数据并绘制每个直方图列。绘制使用了Qt引擎中的QPainter类的drawRect函数,根据数据值计算出直方图的高度,并设定矩形的位置和尺寸。绘制完成后,显示窗口。 在main函数中,首先生成了一个随机音频数据,然后创建MusicWidget对象,并将音频数据设置到该对象中,最后显示窗口并启动应用程序的事件循环。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值