这几天因为要做一个效果需要用到QGraphics框架,主要用到了QGraphicsItem、QGraphicsView和QGraphicsScene三个类。其中用scene来添加和管理item,用view去进行数据展现,最开始使用的时候添加item用到了他的一个方法setpos,但是看起来没有生效,但对比qt自带的graphicsView里的例子又看不出问题。
后来经过分析,发现我的view因为放在layout里,在显示的时候被resize了,导致了view和scene的坐标不一致。在view的resizeEvent里overwrite即可。
void
graphicsView::resizeEvent(QResizeEvent *event)
{
qDebug()<<"graphicsView::resizeEvent";
QGraphicsView::resizeEvent(event);
graphicsScene *scene = (graphicsScene*)(this->scene());
QSize newSize = event->size();
QRectF newRc(0,0,newSize.width(),newSize.height());
scene->setSceneRect(newRc);
scene->update(newRc.x(),newRc.y(),newRc.width(),newRc.height());
}