Qt QGraphicsItemGroup获取转换项的坐标

时间:2014-05-15 08:35:50

标签: c++ qt

我在

中有很多rectItem
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));
}

如何转换一组项目,并在获得所有新坐标后? (转换后我想继续使用它们而不是作为一个组)

2 个答案:

答案 0 :(得分:1)

您应该调用 scenePos()函数来获取转换后项目的全局坐标。调用 pos()函数将为您提供项目的父项的本地坐标。

答案 1 :(得分:0)

要取消组合项目组,您可以调用QGraphicsScene :: destroyItemGroup(),也可以通过调用removeFromGroup()手动删除组中的所有项目。

因此,在分组和应用转换后,您可以通过以下方式取消组合:

scene.destroyItemGroup(group);

Qt文档也指出:

  

添加和删除项目的操作可以保留项目&#39;   场景相对位置和转换,而不是呼叫   setParentItem(),其中只有子项的父相对位置   并保持转型。

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