Qt的嵌套的QGraphicsItem坐标

问题描述:

我所期望的,从文档,这个片断Qt的嵌套的QGraphicsItem坐标

MainWindow::MainWindow(QWidget *parent) 
    : QMainWindow(parent) 
{ 
    QGraphicsView *v = new QGraphicsView(new QGraphicsScene); 
    setCentralWidget(v); 

    QGraphicsRectItem *r1 = v->scene()->addRect(QRectF(100,100, 200,200), QPen(), QBrush(Qt::red)); 
    QGraphicsRectItem *r2 = new QGraphicsRectItem(r1); 
    r2->setRect(QRectF(10,10, 50,50)); 
    r2->setBrush(QBrush(Qt::blue)); 
} 

将绘制一个蓝色矩形红色的,而不是在这里是结果:

enter image description here

我错过了什么吗?

我想念什么吗?

是的。

QGraphicsRectItem上调用setRect()实际上并没有改变它的pos(),它只是改变它绘制的矩形的位置,但是该项目的位置不变。因此,您的r1具有(0,0)的位置,但其矩形以(100,100)偏移量绘制到它的pos()

为避免混淆,通常更容易在(0,0)处留下矩形,并在QGraphicsRectItem上致电setPos()将其移动到您想要的位置。

+0

谢谢你的明确解释! – CapelliC 2013-05-08 16:53:25

如果您想要红色矩形内的蓝色矩形,您可以在屏幕坐标中设置其矩形位置,或者将蓝色矩形设置为带有setParentItem的红色矩形的父项。这样,孩子的位置就相对于其父母而言。