使用QGraphicsView或QGraphicsScene在较大图像中叠加图像

时间:2012-04-24 18:37:42

标签: c++ qt qgraphicsview

我是Qt的新手,所以我可能会破坏这个问题。说完了 -

我在子类QGraphicsView中渲染图像。我使用addPixmap()将图像作为Pixmap添加到场景中。我想在特定位置的较大图像上叠加(blit)较小的图像。我可以通过再次调用addPixmap()将较小的图像添加到场景中,但它总是显示在左上角。我想自己设置这些坐标。

我该如何做到这一点?

谢谢!

1 个答案:

答案 0 :(得分:1)

QGraphicsScene::addPixmap返回指向添加的QGraphicsPixmapItem的指针。如果你想设置它的位置,你可以这样做:

QGraphicsPixmapItem *item = scene->addPixmap(yourPixmap);
item->setPos(50, 50); // sets position to scene coordinate (50, 50)

如果要将图像叠加在其他图像之上,请确保了解z值。有关详细信息,请参阅QGraphicsItem documentation。基本上,z值决定了堆叠顺序。

最后,熟悉QGraphicsItems的育儿。当QGraphicsItem具有父项时,它意味着(除其他外)其坐标以其父项的坐标表示。因此,如果项目的位置为(0,0),但它是场景位置为(50,50)的项目的子项,则子项目将显示在(50,50)。所以,鉴于上面的例子,你可以这样做:

QGraphicsPixmapItem *childItem = new QGraphicsPixmapItem(item);

这将创建一个新项“childItem”,其父项为“item”。它的坐标是(0,0),因为它们尚未设置,但它的场景坐标是(50,50),因为它是“item”的子节点。请注意,指定项目的父项时,无需将子项目添加到场景中;这是隐含的补充。