我在
中有很多rectItemQVector <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));
}
如何转换一组项目,并在获得所有新坐标后? (转换后我想继续使用它们而不是作为一个组)
答案 0 :(得分:1)
您应该调用 scenePos()函数来获取转换后项目的全局坐标。调用 pos()函数将为您提供项目的父项的本地坐标。
答案 1 :(得分:0)
要取消组合项目组,您可以调用QGraphicsScene :: destroyItemGroup(),也可以通过调用removeFromGroup()手动删除组中的所有项目。
因此,在分组和应用转换后,您可以通过以下方式取消组合:
scene.destroyItemGroup(group);
Qt文档也指出:
添加和删除项目的操作可以保留项目&#39; 场景相对位置和转换,而不是呼叫 setParentItem(),其中只有子项的父相对位置 并保持转型。
因此,在取消分组后,您可以轻松获取项目的位置或其他属性,并继续进行所需的转换或操作。