QGraphicsItem - 项目转换失败

时间:2014-12-06 21:20:26

标签: c++ qt transformation qgraphicsview qgraphicsitem

我有一个在QGraphicsItem内使用的矩形。项目被添加到场景中并且具有预定义的变换,因此它可以正确地映射矩形。它到目前为止一直很好:

QRectF rect;    
QTransform transform;    
QGraphicsPolygonItem box;

box.setTransform(transform);    
box.setPolygon(rect);

qDebug() << rect;
qDebug() << transform;
qDebug() << transform.map(rect.topLeft());
qDebug() << transform.map(rect.topRight());
qDebug() << transform.map(rect.bottomRight());
qDebug() << transform.map(rect.bottomLeft());
qDebug() << transform.map(rect);
qDebug() << box.polygon();
qDebug() << box.scenePos();

输出:

QRectF(34.2629,5.75334 40.4797x55.5691)
QTransform(type=TxProject, 11=8.39145 12=3.651e-16 13=-3.79358e-18 21=-11.232 22=1.24517 23=-0.00673223 31=731.81 32=58.3479 33=0.684533)
QPointF(1478.33, 101.443)
QPointF(2004.32, 101.443)
QPointF(2466.86, 495.792)
QPointF(1216.62, 495.792)
QPolygonF(QPointF(1478.33, 101.443) QPointF(2004.32, 101.443) QPointF(2466.86, 495.792) QPointF(1216.62, 495.792) QPointF(1478.33, 101.443) )
QPolygonF(QPointF(34.2629, 5.75334) QPointF(74.7427, 5.75334) QPointF(74.7427, 61.3225) QPointF(34.2629, 61.3225) QPointF(34.2629, 5.75334) )
QPointF(1069.06, 85.2375)

如预期的那样;一切正常;两个顶点和项本身都被正确转换,我可以使用map函数检查所有顶点。这适用于至少40种不同的变换。

但是,对于另一个转换矩阵,我遇到了这个有趣的结果:

QRectF(29.8193,9.86656 29.6347x43.7413)
QTransform(type=TxProject, 11=-4.51027 12=2.57144e-16 13=-1.00432e-19 21=7.88867 22=0.184078 23=0.00360371 31=-511.257 32=-69.1552 33=-0.353853)
QPointF(1784.23, 211.56)
QPointF(2204.16, 211.56)
QPointF(2218.99, 369.009)
QPointF(1387.07, 369.009)
QPolygonF(QPointF(0, 0) )
QPolygonF(QPointF(29.8193, 9.86656) QPointF(59.454, 9.86656) QPointF(59.454, 53.6079) QPointF(29.8193, 53.6079) QPointF(29.8193, 9.86656) )
QPointF(1444.83, 195.435)

顶点转换成功;但是直接项目不能。它输出(0,0)用于转换。

我认为这一定是框架中的一个错误,因为它可以很好地转换一个点,但它无法转换项目(我也有很多省略号,不能转换它们)。但是,当我试图重现时,我无法做到。它只发生在这个矩阵上。

由于map()不起作用,item.setTransform() - 我想在内部使用map() - 也没有。物品不会出现在现场。

为了清晰的视觉,我在这里附加了第二个矩阵(转置)。enter image description here

我在这里做错了什么?精确的bug? 32位问题?

编辑:挖掘source,似乎map针对不同类型使用不同的方法,例如QPointFQLineF等。

1 个答案:

答案 0 :(得分:0)

向下挖掘bugs,转换似乎不支持负w值,这是我面临的问题,因为w = m13.px + m23.py + m33对第二个矩阵是负的。

将矩阵乘以-1修复了错误。

Qt docs应该真的提到这个。