[pure virtual] QRectF QGraphicsItem::boundingRect() const函数

纯虚函数
[pure virtual] QRectF QGraphicsItem::boundingRect() const
的作用:

它是一个矩形框,这个框框是QGraphicsItem的外边框,打个比方,假如QGraphicsItem是一个人像,boundingRect()返回的就是相框边缘的矩形。
如下图(抱歉网上随便搜的一幅图,如有侵权请联系删除),黄色的框框表示这个boundingRect()返回的矩形,而方框里面的人物,景色,则为QGraphicsItem的内容,这个内容可以是多边形,矩形,三角形,直线等等
在这里插入图片描述
boundingRect()返回的这个矩形框的作用,是为了刷新里面的内容。
我们新建一个继承于QGraphicsItem的类,加到Qgraphicscene中去后,假如我们随意设置boundingRect()返回值,如0,0,100,100。 则只会刷新该固定区域。此时,如果我们的实际位置是其他,则很可能无法刷新。因此,很有必要将boundingRect()返回调整成实际物体所在位置的包含区域。

使用一个QPainterPath举例:
QRectF MyItem::boundingRect() const
{
qDebug()<<“boundingRect”;

return thisQRectF;

}

void MyItem::thisQRectF_init()
{
// quint32 rand_value = QRandomGenerator::global()->generate();

// thisQRectF= QRectF(rand_value%500, rand_value%800,rand_value%150, rand_value%180);

qreal startX,startY;
qreal maxX,maxY;
qreal tempPosX,tempPosY;

startX=100;
startY=100;
thisQPainterPath.moveTo(startX,startY);
maxX=startX;
maxY=startY;


tempPosX=150;
tempPosY=150;
thisQPainterPath.lineTo(tempPosX,tempPosY);
if(maxX<tempPosX)
{
    maxX=tempPosX;
}
if(maxY<tempPosY)
{
    maxY=tempPosY;
}

// thisQPainterPath.lineTo(750,250);
tempPosX=750;
tempPosY=250;
thisQPainterPath.lineTo(tempPosX,tempPosY);
if(maxX<tempPosX)
{
maxX=tempPosX;
}
if(maxY<tempPosY)
{
maxY=tempPosY;
}

// thisQPainterPath.lineTo(950,1250);
tempPosX=950;
tempPosY=1250;
thisQPainterPath.lineTo(tempPosX,tempPosY);
if(maxX<tempPosX)
{
maxX=tempPosX;
}
if(maxY<tempPosY)
{
maxY=tempPosY;
}

tempPosX=1150;
tempPosY=350;
thisQPainterPath.lineTo(tempPosX,tempPosY);
if(maxX<tempPosX)
{
    maxX=tempPosX;
}
if(maxY<tempPosY)
{
    maxY=tempPosY;
}

// thisQPainterPath.lineTo(140,250);
tempPosX=140;
tempPosY=250;
thisQPainterPath.lineTo(tempPosX,tempPosY);
if(maxX<tempPosX)
{
maxX=tempPosX;
}
if(maxY<tempPosY)
{
maxY=tempPosY;
}
// thisQPainterPath.lineTo(100,100);

thisQRectF= QRectF(startX,startY,maxX-startX,maxY-startY);

}

可以看到,当窗口移动后,所画的线条会随之刷新;
而当我们将boundingRect()返回调整到一个其他区域的矩形后,移动窗口,发现黄色线条随着窗口移动会逐渐不见!

在这里插入图片描述

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

W001123456789

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值