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

Overlaying image within larger image using QGraphicsView or QGraphicsScene

本文关键字:图像 叠加 QGraphicsView QGraphicsScene 使用      更新时间:2023-10-16

我是Qt的新手,所以我可能会解决这个问题。 话虽如此——

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

我怎样才能做到这一点?

谢谢!

QGraphicsScene::addPixmap返回指向添加的 QGraphicsPixmapItem 的指针。如果要设置其位置,可以执行以下操作:

QGraphicsPixmapItem *item = scene->addPixmap(yourPixmap);
item->setPos(50, 50); // sets position to scene coordinate (50, 50)
如果要将图像

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

最后,熟悉QGraphicsItems的育儿方式。当QGraphicsItem具有父项时,这意味着(除其他外)其坐标以其父项的坐标表示。因此,如果某个项的位置为 (0, 0),但它是场景位置为 (50, 50) 的项的子项,则该子项将显示在 (50, 50)。因此,给定上述示例,您可以执行以下操作:

QGraphicsPixmapItem *childItem = new QGraphicsPixmapItem(item);

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