3

我希望,从文档中,这个片段

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));
}

会在红色矩形内绘制一个蓝色矩形,结果如下:

在此处输入图像描述

我错过了什么吗?

4

2 回答 2

3

我错过了什么吗?

是的。

调用setRect()aQGraphicsRectItem实际上并没有改变它的pos(),它只是改变了它绘制的矩形的位置,但是项目的位置没有改变。因此,您r1的 pos 为 (0, 0),但其矩形是在 (100, 100) 偏移处绘制的pos()

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

于 2013-05-08T16:45:49.190 回答
1

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

于 2013-05-09T10:26:12.283 回答