点击上方"蓝字"关注我们
01、简介
1、需要使用到的 QPainter 类中的函数
2、QRect 和 QRectF 类
QRect 是整型版本,QRectF 是精度更高的浮点型版本,本文以 QRectF 类进行讲解。
QRectF 类对矩形进行了描述,下面为该类中的函数
3、对于 QRect,由于历史原因,bottom()和 right()函数返回的值并不是真正的矩形的右下角,right()返回的值与 left()+width()-1 相同,bottom()返回的值与 top()+height()-1 相同,同理
bottomRight()、topRight()、bottomLeft()函数与 bottom()和 right()类似,详见下图。为避免这种情形,建议使用 QRectF 而不是 QRect。
4、QRectF 类的构造函数
1)、QRectF()QRectF(const QPointF &topLeft, const QSizeF &size); //由左上角的点 topLeft 和大小构造矩形QRectF(const QPointF &topLeft, const QPointF &bottomRight); //由左上角和右下角的点构造矩形QRectF(qreal x, qreal y, qreal width, qreal height)QRectF(const QRect &rectangle)
02、QRectF类中的位置和大小函数
省略说明:
1、读取函数的返回类型与设置函数的形参类型是相同的,并且省略了读取函数小括号后的 const。
2、移动函数和设置函数都省略了返回类型 void,并且形数类型 QPointF 和 QSizeF 前的 const 也省略了。
函数说明:
1、形参 x 指的是 x 轴方向的 x 坐标位置,y 类似。
2、pos 是指的点的坐标位置。
3、height 和 width 是指的矩形的高度和宽高,注意,这不是坐标位置。QSizeF 也是指的宽度和高度。
4、比如 top()返回的是顶部的 y 轴坐标位置,setTop(11);表示设置矩形顶部的位置到 y 轴坐标位置 11 处,
底部保持不变,moveTop(11);表示垂直移动矩形,以使顶部位于 y 辆坐标位置 11 处。详见图示
其余位置和大小函数
1)、
void setRect(qreal x, qreal y, qreal width, qreal height);
设置矩形左上角坐标为(x,y),宽为 width,高为 height
2)、
void setCoords(qreal x1, qreal y1, qreal x2, qreal y2);
设置矩形左上角的坐标为(x1,y1),右下角坐标为(x2,y2);
3)、
void getRect(qreal *x, qreal *y, qreal *width, qreal *height) const;
把矩形的左上角坐标提取到(x,y)中,宽度提取到 width,高度提取到 height 中。
4)、
void getCoords(qreal *x1, qreal *y1, qreal *x2, qreal *y2) const;
把矩形的左上角坐标提取到(x1,y1)中,左上角坐标提取到(x2,y2)中。
03、判断矩形及点
1)、
bool contains(const QPointF &point) const;
若点 point 位于矩形内(含边缘),则返回 true。
bool contains(const QRectF &rectangle) const;
若矩形 rectangle 位于该矩形内,则返回 true。
bool contains(qreal x, qreal y) const; //若点(x,y)在矩形内(含边缘),则返回 true。
2)、
bool isEmpty() const; //矩形是否为空,详见下文。bool isNull() const; //矩形是否不存在,详见下文。bool isValid() const; //矩形是否无效,详见下文。
若 宽度<=0 或 高度<=0,则 isEmpty()返回 true。
若 宽度=0 且 高度 = 0,则 isNull()返回 true。
空矩形意味着是无效的,即 isEmpty==!isValid();
注意:宽度或高宽 < 0 不代表该矩形不存在,若宽度或高度小于 0,矩形会向相反的方
向绘制。
示例:
QRectF r1(11,11, 0, 111);//r1.isEmpty() = true; r1.isNull() = false; r1.isValid() = false。QRectF r2(11,11, 0, 0);//r2.isEmpty() = true; r2.isNull() = true; r2.isValid() = false。QRectF r3(11,11, −111, −111); //r3.isEmpty() = true; r3.isNull() = false; r3.isValid() = false。QRectF r4(11,11, 111, 111); //r4.isEmpty() = false; r4.isNull() = false; r4.isValid() = true。
3)、
QRectF normalized() const;
返回一个规范化矩形(即有效矩形),若 width() < 0,则交换左右角,若 height()<0,则
交换上下角。比如
QRectF r1(11,11, −111,111); QRectF r2 = r1.normalized(); //r2 =(11,11,111,111);
04、平移矩形
1)、
void translate(qreal dx, qreal dy); void translate(const QPointF &offset);QRectF translated(qreal dx, qreal dy) const;QRectF translated(const QPointF &offset) const;
把矩形沿 x 轴移动距离 dx,沿 y 轴移动距离 dy,负值向反方向移动。注意:移动的是
距离,而不是位置,其中 translate()会改变原矩形,而 translated()不会改变原矩形,但
会返回一个偏移后的副本。以上函数的原理与 QLineF 类中的相应函数是相同的,详见
QLineF 类。
2)、
QRectF transposed() const;
返回交换该矩形宽度和高度后的副本。比如
QRectF r1(11,33, 77,99);QRectF r2=r1.transposed(); //r1 不变,r2 是 r1 交换高宽后的结果,即 r2=(11,33,99,77);
05、调整矩形
1)、
void adjust(qreal dx1, qreal dy1, qreal dx2, qreal dy2)QRectF adjusted(qreal dx1, qreal dy1, qreal dx2, qreal dy2) const
把矩形的左上角坐标加上(dx1, dy1);右下角坐标加上(dx2, dy2); 其中 adjust()会改变原
矩形的坐标值,adjusted()不会改变原矩形的坐标值,但会返回一个新矩形,示例如下:
QRectF r1(QPointF(11,22), QPointF(111,122) );r1.adjust(33,33,155,155) ; //r1 左上角坐标为(44,55),右上角坐标为(266,277);QRectF r2=r1.adjusted(33,33,155,155) ; //r1 不变,r2 左上角坐标为(44,55),右上角坐标为(266,277);
2)、
QRectF marginsAdded(const QMarginsF &margins) const;//qt5.3QRectF marginsRemoved(const QMarginsF &margins) const;//qt5.3
返回一个在现有矩形上增加或减小了边距 margins 的新矩形(即调整矩形的宽度和高度)
06、矩形的交集和并集
1)、
QRectF intersected(const QRectF &rectangle) const
返回该矩形与矩形 rectangle 的交集(即两矩形的重叠区域),注意:r1.intersected(r2)相当
于 r1&r2。
2)、
bool intersects(const QRectF &rectangle) const; //若该矩形与矩形 rectangle 相交,则返回 true。
3)、
QRectF united(const QRectF &rectangle) const; //返回该矩形与矩形 rectangle 的边界矩形。
07、浮点型与整形间的转化及其他
QRect toAlignedRect() const; //返回完全包含该矩形的最小 QRect(整数)矩形。QRect toRect() const; //根据该矩形返回一个 QReect(整数)矩形,其值将被四舍五入到最接近的整数。CGRect toCGRect() const; //从 QRectF 创建 CGRect, qt5.8static QRectF fromCGRect(CGRect rect); //从 rect 创建一个 QRectF, 静态的,qt5.8
08、重载的操作符函数
QRectF operator&(const QRectF &rectangle) const; //返回两矩形的交集。QRectF &operator&=(const QRectF &rectangle);QRectF &operator+=(const QMarginsF &margins); //返回增加边距后的矩形QRectF &operator-=(const QMarginsF &margins); //返回缩小边距后的矩形。QRectF operator|(const QRectF &rectangle) const; //返回边界矩形(并集)。QRectF &operator|=(const QRectF &rectangle)
总结
学而时习之,不亦说乎
故我在
点击下方卡片 关注我
↓↓↓
Qt历险记
一名技术分享师,分享方向:->Qt(C/C++、linux、STM32、MySql/Sqlite3、TCP/UDP),设计方面->Ai、PS、visio、AD、Protues。 【v合作:Family_S_Health】
**
公众号
好看,请点击
收藏
点赞
在看
+1