我是 Qt 的新手,所以我可能会弄乱这个问题。话说回来-
我在子类 QGraphicsView 中渲染图像。我使用 addPixmap() 将图像作为 Pixmap 添加到场景中。我想在特定位置的较大图像之上覆盖(blit)较小的图像。我也可以通过再次调用 addPixmap() 将较小的图像添加到场景中,但它始终显示在左上角。我想自己设置这些坐标。
我怎样才能做到这一点?
谢谢!
我是 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 有一个父项时,这意味着(除其他外)它的坐标以其父项的坐标表示。所以如果一个item的位置是(0, 0),但是它是场景位置是(50, 50)的item的child,那么child item会显示在(50, 50)。因此,鉴于上面的示例,您可以执行以下操作:
QGraphicsPixmapItem *childItem = new QGraphicsPixmapItem(item);
这将创建一个新项目“childItem”,其父项是“item”。它的坐标是 (0, 0),因为它们还没有被设置,但是它的场景坐标是 (50, 50),因为它是 "item" 的孩子。请注意,当您指定项目的父项时,您不需要将子项目添加到场景中;它是隐式添加的。