Qt嵌套的QGraphicsItem坐标

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

我希望在红色矩形内部绘制一个蓝色矩形,但实际得到的结果是这样的:

enter image description here

我错过了什么吗?
2个回答

3

我有遗漏吗?

有的。

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

为避免混淆,通常最好将矩形保留在(0,0)处,并在QGraphicsRectItem上调用setPos()以将其移动到所需位置。


1
如果你想让蓝色矩形在红色矩形内部,你可以将其矩形位置设置为屏幕坐标,或使用setParentItem将蓝色矩形设置为红色矩形的父项。这样,子项的位置相对于其父项设置。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接