QT图形视图框架中的scene与view坐标的相对应问题

来源:互联网 发布:北京资采数据挖掘 编辑:程序博客网 时间:2024/05/19 02:29

QGraphicsItem的坐标是相对于它的父Item的,如果该Item无父,那么它的父默认为scene,也就是说无父的Item坐标是相对于scene的,即该Item位于Scene的坐标系统中。

最近在使用图形视图框架的时候碰到一个Item的坐标与预想中不一样的问题。
首先设置窗体的Geometry为(100,100,800,500);
设置Scene的SceneRect为(100,100,500,300);
设置view的Geometry为(100,100,820,520);
然后创建一个无父SimpleTextItem添加到scene中,Item setPos为(100,100);
上代码:

    m_scene=new QGraphicsScene(this);    m_scene->setBackgroundBrush(Qt::gray);    m_scene->setSceneRect(100,100,800,500);//pos 位置相对于 parent    QGraphicsSimpleTextItem *simpleTextItem=new QGraphicsSimpleTextItem;    simpleTextItem->setPos(100,100);    simpleTextItem->setText("aaa");    m_scene->addItem(simpleTextItem);    m_view=new QGraphicsView(this);    m_view->setGeometry(100,100,820,520);//(100,100)是指view在窗体上的位置    m_view->setScene(m_scene);//设置后,view的(0,0)默认是scene的(0,0)    m_view->show();

这里写图片描述
运行效果可以如图片所示,黄色的”aaa”是我用PS写上去的,因为我预想”aaa”应该会显示到这个黄色”aaa”所在的地方,然而真正的”aaa”却出现在了view的左上角。

这个问题的原因是什么呢?
答案是Scene的Geometry中的坐标对齐view的(0,0);
在这个例子中就是Scene的(100,100)对其view的(0,0),所以scene的(0,0)应该在view的左上距离(100,100)处,而Item的坐标系是相对于scene的,所以Item在Scene的(100,100)处,即View的(0,0)处.