Qt QGraphicsItemGroup获取转换项的坐标

Qt QGraphicsItemGroup get coordinate of transformed items

本文关键字:坐标 转换 QGraphicsItemGroup 获取 Qt      更新时间:2023-10-16

我在一个

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(),其中只有子项的父相对位置和变换保持不变。

因此,在取消分组之后,您可以轻松地获得项目的位置或其他属性,并继续进行所需的转换或操作。