setRect()函数
三个坐标系我就不多说了,view原点默认在左上角,scene和item的原点默认都在中心位置。
注意:此函数并不能设置一个item的位置,我的理解是当一个item调用该函数时,会构建一个一个item的坐标系,参数x,y代表这个item原点的坐标位置(基于item自身的坐标系),w和h不用多说,代表宽高。举个例子:
setPos()函数
item调用此函数,表示把item自身的坐标原点移动到场景坐标的x,y处,例如,item->setPos(0,0),对于设置不同rect的item,最终显示的位置也不一样。
当场景中的item进行移动时,item的rect是不会改变的,即在自己的item类中调用rect(),值是不会改变的,改变的是pos属性,例如,当外部拖动进一个item到view中,如果希望item中心位置在鼠标位置处然后创建显示,可以设置item->setRect(-w/2,-h/2,w,h),然后setPos(mousepos),就可以实现。
关于场景scene的setSceneRect的思考
这个也是同理,其实函数创建的是一个场景的坐标系。即
如果希望场景原点和视图原点重合:scene->setScene(0,0,w,h);注意w和h是view最新的宽高,如果小于view的宽高,场景原点可能不会和view重合,原因以后在研究。