首页 > 其他分享 >Qt | QRectF的使用以及应用场景

Qt | QRectF的使用以及应用场景

时间:2022-10-18 23:36:31浏览次数:85  
标签:场景 Qt 位置 QRectF 设置 curRect rect 坐标

1 简介

官方文档QRectF

QRectF中保存(x, y, width, height),常常用于记录图形项在局部坐标系中的位置以及图形项的宽高:

QRectF rect = this->rect();

2 位置与宽高的设定与访问

官方文档提供了几种设置与访问上述参数的方法,直接设置坐标、直接设置宽高、设置边点的位置、设置整体的位置、移动某边或者某点。
其中设定坐标、设定边点位置等都会影响矩形区域的宽高。

  1. 直接设置坐标:

    rect.setX()
    rect.setY()//设置
    
    rect.x()
    rect.y()//访问
    

    直接设定xy坐标会直接改变坐标,Right和Bottom边的位置不变,因此会导致宽高发生变化。

  2. 直接设置宽高

    rect.setWidth()
    rect.setHeight()//设置
    
    rect.width()
    rect.height()//访问
    

    直接设定width height后,坐标不改变,宽高会改变。

  3. 设置某边或者点的坐标
    rect指定了一个矩形区域,此区域有四条边、四个点,可以直接操作边或者点来设置。

    rect.setLeft(qreal pos)
    rect.setTopLeft(QPointF)//设置
    
    rect.left()
    rect.topLeft()//访问
    
    Left\Right\Top\Bottom
    TopLeft\TopRight\BottomLeft\BottomRight
    

    设置的边或者点的位置发生变化,但是对边或者对角点的位置不变。

  4. 两种方式直接确定矩形区域:

    rect.setRect(x, y, w, h) //设置矩形区域的局部坐标以及宽高
    rect.setCoords(x1, y1, x2, y2) //设置左上点和右下点坐标
    
  5. 移动某边某点:

    rect.moveTop()
    rect.moveTopLeft()
    

    move系列的方法类似于鼠标拽住某个指定位置将item移动到指定位置,矩形的大小不变!

总结:
设置QRectF的四种方式中:

  1. 设置宽高只会影响右边以及下边边的位置;
  2. 设置坐标时右边以及下边位置不变,因此会影响宽高
  3. 设置边位置或者点位置时,对边或者对角点位置固定,因此也会影响宽高
  4. move系列的方法类似于鼠标拽住某个指定位置将item移动到指定位置,矩形的大小不变
  5. 设置时使用set,访问去掉set即可!

3 使用(原位置+偏移)

在使用时直接指定边或者坐标的绝对量很容易出现错误,常常使用原位置+偏移位置的方式来设置坐标或者边、点的位置!

#include <QtWidgets>
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);

    QRectF curRect(0, 0, 100, 200);//QRectF(0,0 100x200)
    curRect.setX(20);//QRectF(20,0 80x200) 宽度!
    curRect.setWidth(300);//QRectF(20,0 300x200)
    curRect.setLeft(curRect.left() + 30);//QRectF(50,0 270x200) 右边不动,宽度变窄!
    curRect.setTopLeft(curRect.topLeft() + QPointF(20, 40));//QRectF(70,40 250x160) 右下点不动,宽高变窄!
    curRect.setRight(curRect.right() - 60);//QRectF(70,40 190x160)  左边不动,移动右边,宽度变窄!
    curRect.moveTop(curRect.top() + 33);//QRectF(70,73 190x160) 移动整体,整体尺寸不变!
    curRect.moveTopLeft(curRect.topLeft() + QPointF(55, 55));//QRectF(125,128 190x160) 根据左上移动整体,整体尺寸不变!
     
    return a.exec();
}

4 场景

  1. 在QGraphicsItem体系中,常常需要拉伸item,可以通过计算某边移动的偏移量,基于rect原位置来设置rect对应的边即可。

  2. 子部件受到父部件的约束,子部件大小不能超过父部件,位置不能超出父部件,因此使用rect判断以及判断后的移动很方便!

标签:场景,Qt,位置,QRectF,设置,curRect,rect,坐标
From: https://www.cnblogs.com/wsw2022/p/16804600.html

相关文章