Qt嵌套QGraphicsItem坐标

时间:2013-05-08 16:22:48

标签: 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

我错过了什么吗?

2 个答案:

答案 0 :(得分:3)

  

我错过了什么吗?

setRect()上调用QGraphicsRectItem实际上并未更改其pos(),它只会更改其绘制的矩形的位置,但项目的位置不会更改。因此,您的r1的pos为(0,0),但其矩形以(100,100)偏移绘制到其pos()

为避免混淆,通常更容易将你的矩形放在(0,0)并在setPos()上拨打QGraphicsRectItem以将其移动到你想要的位置。

答案 1 :(得分:0)

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