一、问题描述
在使用QGraphicsView打开图片的过程中,发现如果图片大小大于view大小时,图片无法完全显示,且view周边不出现滚动条,导致无法查看图片全貌,相关代码如下:
QGraphicsScene *scene = new QGraphicsScene(this);QGraphicsView *graphicsView = new QGraphicsView();graphicsView->setScene(scene);scene->setSceneRect(-200,-200,400,400);graphicsView->setMinimumSize(400,400);
图片显示如下:
上图左侧,是view区域,其中显示的图片只是我打开图片的一部分,且周围没有滚动条,无法查看图片全貌。
二、问题分析
QGraphicsScene是QGraphicsView的逻辑空间,QGraphicsView只是用来显示QGraphicsScene中部分或全部内容的显示控件,相当于它的窗口。由上面的代码看出,我把scene的大小已经固定了。 当图片的大小大于scene的大小时,那么scene只能放下图片的一部分,所以无论view怎么变,它所能显示的始终只是scene中的内容,所以它无法显示图片的全貌。但错不在它,而在于scene。
三、解决办法
既然scene是万恶之源,那就改变scene的大小。通过在每次打开一张图片时根据图片大小动态设定scene的大小,问题就得以解决。相关代码如下:
QGraphicsScene *scene = new QGraphicsScene(this); QGraphicsView *graphicsView = new QGraphicsView(); graphicsView->setScene(scene); QPixmap pix(); ...//此处省略代码为打开一张图片的代码 scene->setSceneRect(-pix.width() / 2,-pix.height() / 2,pix.width(),pix.height());//根据图片大小动态设定scene大小 graphicsView->setMinimumSize(400,400);
这时图片显示如下:![输入图片说明](https://static.oschina.net/uploads/img/201610/03130528_UnB7.png "在这里输入图片标题")可以看到,较大图片显示时,view周围出现了滚动条,可以通过滚动条查看图片全貌。那么打开一张小图片会怎么样呢?![输入图片说明](https://static.oschina.net/uploads/img/201610/03130647_tuTV.png "在这里输入图片标题")可以看到,显示正常,同时view周围也没出现滚动条。问题解决!