Qt QGraphicsItemGroup获取转换项的坐标
Qt QGraphicsItemGroup get coordinate of transformed items
我在一个
QVector <GraphicsRectItem *> list_rect_item;
我将它们分组在QGraphicsItemGroup中,使它们从场景的中间旋转:
for(int i=0 ; i < list_rect_item.size() ; i++) {
group->addToGroup(list_rect_item.at(i));
}
QPoint point_center(scene.width()/2, scene.height()/2);
group->setTransformOriginPoint(point_center);
group->setRotation(ui->box_angle->value());
但现在我想知道有新的坐标,所以我尝试这个,但它没有工作(我得到的坐标之前的旋转):
QList<QGraphicsItem> group_list = group->childItems();
for(int i=0 ; i < list_rect_item.size() ; i++) {
list_rect_item.at(i)->setPos(group_list.at(i).pos());
scene.addItem(list_rect_item.at(i));
}
我如何变换一组项目,然后得到所有的新坐标?(转换后我想继续使用它们,而不是作为一个组)
您应该调用scenePos()函数来获取转换后项目的全局坐标。调用pos()函数将给出该项相对于该项父项的局部坐标。
要取消一个项目组,您可以调用QGraphicsScene::destroyItemGroup(),或者您可以通过调用removeFromGroup()手动从组中删除所有项目。
因此,在分组和应用转换后,你可以取消分组:
scene.destroyItemGroup(group);
Qt文档也指出:
添加和删除项目的操作保留了项目。场景相对位置和变换,而不是召唤setParentItem(),其中只有子项的父相对位置和变换保持不变。
因此,在取消分组之后,您可以轻松地获得项目的位置或其他属性,并继续进行所需的转换或操作。
相关文章:
- 在C++中使用GDAL可以将图像的像素坐标转换为lat,long吗
- 在 OpenGL 中将笛卡尔世界坐标转换为球面局部坐标
- 如何将鼠标坐标转换为"mm"
- 如何将 QTabWidget 坐标转换为其子坐标?
- 将 2D 图像坐标转换为 z = 0 的 3D 世界坐标
- 如何将世界坐标转换为相机图像坐标
- 将鼠标坐标转换为世界空间坐标
- 将画布坐标转换为外部微件的坐标
- 将 2D 屏幕坐标转换为 3D 世界坐标
- 如何将像素坐标转换为世界坐标
- 如何从 GLUT 坐标转换为窗口坐标
- 将点云的坐标转换为点云库中的另一个坐标,从而使地平面成为X-O-Y平面?
- 将 X Y 坐标转换为拉特长等距柱状投影C++
- 将 3D 坐标转换为 3ds 中的 2D 最大值
- 将屏幕鼠标坐标转换为窗口坐标
- Opengl 屏幕到地图坐标转换
- 在 OpenGL 中将 3D 坐标转换为屏幕坐标
- 将双点坐标转换为字符串
- gluUnProject试图将鼠标坐标转换为opengl坐标的奇怪行为
- 从视口坐标转换为[-1,1]^2顶点[ENGGL]