美文网首页
QGraphicsItem的Parent与Group差别

QGraphicsItem的Parent与Group差别

作者: NullUser | 来源:发表于2023-10-30 15:36 被阅读0次

    层级

    • Parent
    1. 默认情况下,子项的层级在Parent之上,即先绘制Parent,再绘制Children。
    2. 可以调用stackBefore()修改绘制顺序。
    3. 通过设置ItemStacksBehindParent,将该Item设置在Parent之下,即先绘制Children,再绘制Parent。
    • Group
    1. addToGroup()将重新设置Item的Parent关系到该Group。

    坐标

    • Parent
    1. 置Parent后,item的坐标将以Parent的坐标为准,即Item的坐标为相对于Parent的偏移。Item在Scene中位置会被改变。
    • Group
    1. 将Item添加到Group后,Item坐标将自动转换,确保Item在Scene中的位置不变。

    测试

    1. 先准备一个参考矩形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);
    
    1. 准备两个测试矩形r1r2如下。
        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);
    

    结果:由于r2r1的父项,因此先绘制r2,再绘制r1

    • 同时,r1的位置(0,0)此时是相对于父项r2而言,因此r1在Scene中的位置变为了(20,20)。
      image.png

    情形三,先设置父子关系,再添加到场景:

    先设置r2r1的父项,再将其添加到场景中。

    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

    先将r1r2添加到scene中,再将r1添加到group

    scene->addItem(r1);
    scene->addItem(r2);
    group->addToGroup(r1);
    

    结果:r1的位置将不变。

    image.png

    相关文章

      网友评论

          本文标题:QGraphicsItem的Parent与Group差别

          本文链接:https://www.haomeiwen.com/subject/owmbidtx.html