2

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

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

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

x,y 图
(来源:shmoop.com

我该怎么做呢。

4

1 回答 1

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);
     }
 };
于 2013-02-24T19:14:44.180 回答