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

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));
}
会在红色矩形内绘制一个蓝色矩形,结果如下:

我错过了什么吗?

最佳答案



是的。

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

为避免混淆,通常更容易将 rect 保留在 (0, 0) 并在 setPos() 上调用 QGraphicsRectItem 以将其移动到您想要的位置。

关于Qt 嵌套 QGraphicsItem 坐标,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16445532/

10-11 18:25