层级
- Parent
- 默认情况下,子项的层级在Parent之上,即先绘制Parent,再绘制Children。
- 可以调用
stackBefore()修改绘制顺序。 - 通过设置
ItemStacksBehindParent,将该Item设置在Parent之下,即先绘制Children,再绘制Parent。
- Group
-
addToGroup()将重新设置Item的Parent关系到该Group。
坐标
- Parent
- 置Parent后,item的坐标将以Parent的坐标为准,即Item的坐标为相对于Parent的偏移。Item在Scene中位置会被改变。
- Group
- 将Item添加到Group后,Item坐标将自动转换,确保Item在Scene中的位置不变。
测试
- 先准备一个参考矩形
r,和一个GroupItemgroup,将其添加到场景中。
矩形r的坐标为(0,0),大小为200 x 200.
group的坐标为(20,20)
QGraphicsRectItem* r = new QGraphicsRectItem(0, 0, 200, 200);
QGraphicsItemGroup* group = new QGraphicsItemGroup();
group->setPos(20, 20);
scene->addItem(r);
scene->addItem(group);
- 准备两个测试矩形
r1、r2如下。
QGraphicsRectItem* r1 = new QGraphicsRectItem(0, 0, 100, 50);
r1->setPos(0, 0);
r1->setBrush(Qt::red);
QGraphicsRectItem* r2 = new QGraphicsRectItem(0, 0,50,100);
r2->setPos(10, 10);
r2->setBrush(Qt::green);
情形一,添加Item的默认情况:
将两个矩形添加到Scene中。
scene->addItem(r1);
scene->addItem(r2);
结果:先绘制红色矩形r1,再绘制绿色矩形r2
image.png
情形二,将矩形r2设置为矩形r1的父项:
先添加两个矩形,然后将r2设为r1的父项。
scene->addItem(r1);
scene->addItem(r2);
r1->setParentItem(r2);
结果:由于r2为r1的父项,因此先绘制r2,再绘制r1。
- 同时,r1的位置(0,0)此时是相对于父项
r2而言,因此r1在Scene中的位置变为了(20,20)。
image.png
情形三,先设置父子关系,再添加到场景:
先设置r2为r1的父项,再将其添加到场景中。
r1->setParentItem(r2);
scene->addItem(r1);
scene->addItem(r2);
结果:设置完r1的父项后,将r1添加到Scene中,此时r1的parent变为NULL,因此又先画r1再画r2。
image.png
情形四,设置r2的Z值大于r1的Z值,然后将r2设置为r1的父项。
scene->addItem(r1);
scene->addItem(r2);
r1->setZValue(1);
r2->setZValue(2);
r1->setParentItem(r2);
结果:虽然r2的Z值大于r1的Z值,但是仍然先绘制父项r2。
image.png
情形五,将r1添加到group中
先将r1和r2添加到scene中,再将r1添加到group。
scene->addItem(r1);
scene->addItem(r2);
group->addToGroup(r1);
结果:r1的位置将不变。
image.png








网友评论