更改QGraphicsItem本地坐标系以使原点为(0,0)

时间:2013-02-24 16:22:17

标签: qt qt4 qt5 qgraphicsitem qgraphicsscene

我有一个QGraphicsView和一个QGraphicsScene,名为scene with scene-> setSceneRect(0,0,600,600)。

我创建了一个简单的自定义QGraphicsItem,名为background with boundingRectangle(0,0,600,600)。

很明显,背景项目的中心是(300,300),minX = 0,minY = 0,maxX = 600,maxY = 600 ...但我希望这个背景项目的中心为(0,0) minX = -300,minY = -300,原点为(0,0),maxX = 300,maxY = 300。 换句话说,我希望背景项目的局部坐标系统能够反映我们在纸上绘制的自然坐标系统。

x,y graph http://www.shmoop.com/images/prealgebra/unit6/pa.6.094.png

我该怎么做。

1 个答案:

答案 0 :(得分:2)

如果您有自定义QGraphcisItem,则您负责绘画和几何图形。因此,您可以将矩形绘制为左上角(-300,-300)和右下角(300,300),只要确保通过覆盖并实现QGraphicsItem::boundingRect()来返回匹配的边界矩形。

以下是Qt文档中的一个示例:

 class SimpleItem : public QGraphicsItem
 {
 public:
     QRectF boundingRect() const
     {
         qreal penWidth = 1;
         return QRectF(-10 - penWidth / 2, -10 - penWidth / 2,
                       20 + penWidth, 20 + penWidth);
     }

     void paint(QPainter *painter, const QStyleOptionGraphicsItem *option,
                QWidget *widget)
     {
         painter->drawRoundedRect(-10, -10, 20, 20, 5, 5);
     }
 };