Qt中QGraphicsView无法自适应图片大小问题

本文介绍了解决QGraphicsView无法完整显示大于其视图大小的图片的问题。通过动态调整QGraphicsScene尺寸,使视图能显示完整图片并自适应滚动条。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、问题描述

在使用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周围也没出现滚动条。
问题解决!

转载于:https://my.oschina.net/u/2602561/blog/754308

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值