设置QGraphicsScene的坐标并举例

在Qt中,QGraphicsScene本身并没有一个直接的“设置坐标”的方法,因为场景的坐标系统是由其内部的图形项(如QGraphicsItem对象)的位置和变换来定义的。但是,你可以通过添加、移动或变换场景中的图形项来间接地“设置”或改变场景中的内容布局。

以下是一个简单的例子,说明如何在QGraphicsScene中添加图形项,并设置它们的位置(坐标):

 
#include <QApplication>  
#include <QGraphicsScene>  
#include <QGraphicsView>  
#include <QGraphicsRectItem>  
  
int main(int argc, char *argv[])  
{  
    QApplication app(argc, argv);  
  
    // 创建一个QGraphicsScene对象  
    QGraphicsScene scene;  
  
    // 创建一个QGraphicsRectItem对象,并设置其位置和大小  
    QGraphicsRectItem *rect1 = new QGraphicsRectItem(QRectF(0, 0, 100, 100));  
    rect1->setPos(50, 50); // 设置矩形项在场景中的位置(坐标)  
    scene.addItem(rect1); // 将矩形项添加到场景中  
  
    // 创建另一个QGraphicsRectItem对象,并设置其位置和大小  
    QGraphicsRectItem *rect2 = new QGraphicsRectItem(QRectF(0, 0, 100, 100));  
    rect2->setPos(200, 200); // 设置另一个矩形项在场景中的位置(坐标)  
    rect2->setBrush(Qt::red); // 设置填充颜色为红色,以便区分  
    scene.addItem(rect2); // 将矩形项添加到场景中  
  
    // 创建一个QGraphicsView对象来显示场景  
    QGraphicsView view(&scene);  
    view.setRenderHint(QPainter::Antialiasing); // 设置抗锯齿渲染提示  
    view.setBackgroundBrush(QPixmap(":/images/cheese.jpg")); // 设置背景图片(可选)  
    view.show(); // 显示视图  
  
    return app.exec();  
}

在这个例子中,我们创建了两个QGraphicsRectItem对象,并分别设置了它们在场景中的位置(通过setPos()方法)。然后,我们将这两个矩形项添加到QGraphicsScene对象中。最后,我们创建了一个QGraphicsView对象来显示这个场景。

请注意,这个例子中的坐标是相对于场景左上角的,即场景的原点(0,0)位于左上角。setPos()方法用于设置图形项在场景中的位置。在这个例子中,第一个矩形被设置在(50,50)的位置,而第二个矩形被设置在(200,200)的位置。

另外,QRectF(0, 0, 100, 100)定义了一个矩形的大小,其左上角位于(0,0),宽度和高度均为100。但是,这个矩形在场景中的最终位置是由setPos()方法确定的。

上面,QRectF(0, 0, 100, 100)里的0, 0表示的是坐标吗

是的,QRectF(0, 0, 100, 100)中的前两个参数0, 0表示矩形左上角的初始坐标。在这个例子中,0, 0是矩形左上角的x和y坐标,意味着矩形的左上角在创建时是位于原点的。然而,这个矩形的最终位置在QGraphicsScene中是由setPos()函数来确定的。

当你创建一个QGraphicsRectItem并给它一个QRectF来定义其大小和初始位置时,这个初始位置是相对于图形项自己的局部坐标系的。但是,当你将这个图形项添加到QGraphicsScene中并使用setPos()设置其位置时,你是在指定图形项在场景坐标系中的位置。

所以,在QRectF(0, 0, 100, 100)中的0, 0是图形项内部坐标系的原点,而setPos(50, 50)则是将这个图形项放置在场景坐标系的(50, 50)位置。这样,即使矩形的左上角在其自身坐标系中是(0, 0),在场景中它实际上会出现在(50, 50)的位置。

这时候我获取QGraphicsRectItem坐标,会是(0, 0),还是(50, 50)

 

当你获取一个QGraphicsRectItem的坐标时,你得到的坐标值取决于你使用的方法。

  1. 局部坐标:如果你直接查询图形项(如QGraphicsRectItem)的坐标,通常得到的是该图形项在其自身局部坐标系中的位置。在这种情况下,由于QRectF(0, 0, 100, 100)定义了矩形的局部位置和大小,其左上角的局部坐标仍然是(0, 0),这是相对于图形项自身坐标系的。

  2. 场景坐标:如果你想获取图形项在QGraphicsScene中的坐标,即场景坐标,你需要使用QGraphicsItempos()方法。这个方法返回的是图形项在场景中的位置,考虑到之前通过setPos(50, 50)设置了位置,pos()将返回QPointF(50, 50)

所以,回答你的问题:

  • 如果你查询的是图形项的局部坐标(例如,通过rect()方法获取其边界矩形),你将得到(0, 0)作为左上角的坐标。
  • 如果你查询的是图形项在场景中的坐标(通过pos()方法),你将得到(50, 50)

这两种坐标系统是不同的,局部坐标是相对于图形项自身的,而场景坐标是相对于整个场景的。

在QRectF(0, 0, 100, 100)中的0, 0,是矩形在QGraphicsRectItem内部的坐标,对吗

是的,您是正确的。在QRectF(0, 0, 100, 100)中的0, 0指的是矩形在其自身的局部坐标系中的左上角坐标。换句话说,这是矩形在QGraphicsRectItem内部的坐标。这个矩形是相对于QGraphicsRectItem的左上角来定位的,其左上角坐标被设定为(0, 0)

当您创建一个QGraphicsRectItem并给它指定一个QRectF时,您实际上是在定义这个图形项的形状和它在自身坐标系中的位置。然而,这个图形项在QGraphicsScene中的绝对位置是通过setPos()方法来设置的。

所以,QRectF(0, 0, 100, 100)定义了矩形的形状和大小,以及矩形在QGraphicsRectItem内部(或说是在其局部坐标系中)的位置,而setPos()则用来设置QGraphicsRectItemQGraphicsScene中的位置。

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值