一、前言
在使用Qt的图形视图框架添加图元时,因为我们的不当操作,可能会使得图元的场景坐标一直为(0,0)
当我们需要使用场景坐标scenePos的时候就会达不到我们的需求。
二、原因
举例说明:当我们需要添加一个(100,100)到(1000,1000)的QGraphicsLineItem时,可能会通过下面的方案添加图元:
QGraphicsLineItem* lineItem = new QGraphicsLineItem(100,100,1000,1000);
addItem(lineItem);
或者
QGraphicsLineItem* lineItem = new QGraphicsLineItem;
lineItem->setLine(100,100,1000,1000)
addItem(lineItem);
这种添加方式,scenePos就会一直为(0,0)
三、解决方案
Qt的图形视图框架,在添加图元时,官方的推荐方法是:先在(0,0)点处创建图元,然后移动到指定位置
举例说明:当我们需要添加一个(100,100)到(1000,1000)的QGraphicsLineItem时:
QGraphicsLineItem* lineItem = new QGraphicsLineItem(0,0,1000-100,1000-100);
addItem(lineItem);
lineItem->setPos(100,100);
或者
QGraphicsLineItem* lineItem = new QGraphicsLineItem;
lineItem->setLine(0,0,1000-100,1000-100)
addItem(lineItem);
lineItem->setPos(100,100);
通过这种方式添加图元,图元的scenePos就不会一直是(0,0)