层级
- 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
情形二,将矩形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
。
情形四,设置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
。
情形五,将r1
添加到group
中
先将r1
和r2
添加到scene中,再将r1
添加到group
。
scene->addItem(r1);
scene->addItem(r2);
group->addToGroup(r1);
结果:r1
的位置将不变。
网友评论