我需要获取设置了QGraphicsItem
标志的QGraphicsItem::ItemIgnoresTransformations
s的边界框(在场景空间中)。
根据文档,您需要使用QGraphicsItem::deviceTransform()来执行此操作。我试过这个:
// Get the viewport => scene transform
vp_trans = view.viewportTransform();
// Get the item => viewport transform
trans = item.deviceTransform(vp_trans);
// Get the item's bounding box in item's space
bbox = item.boundingRect();
// Map it to viewport space
bbox = trans.mapRect(bbox);
// Map it back to scene's space
bbox = vp_trans.mapRect(bbox);
但是出了点问题,边界框看起来更小并且远离项目的右边......
答案 0 :(得分:3)
刚想通了,QGraphicsView :: viewportTransform()doc说“返回一个将视口坐标映射到场景坐标的矩阵”,但实际上它返回场景到视口转换。
在最后一步中反转vp_trans解决了我的问题。