博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Qt中QGraphicsView无法自适应图片大小问题
阅读量:6968 次
发布时间:2019-06-27

本文共 1282 字,大约阅读时间需要 4 分钟。

hot3.png

一、问题描述

在使用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

你可能感兴趣的文章
eclipse提交项目到github
查看>>
小米正式开源 Istio 管理面板 Naftis
查看>>
小白们不要慌,这里为你提供免费靠谱的python学习流程图
查看>>
利用种子文件对windows7的攻击-学习笔记
查看>>
微信小程序中异步处理终极方案async/await
查看>>
Java 面向对象 之 方法的覆盖
查看>>
开发者应该了解Kubernetes对于程序的影响点
查看>>
[Spark]Spark Streaming 指南三 DStreams
查看>>
LeetCode 14 Longest Common Prefix(最长公共前缀)(String)
查看>>
关注 | 《财富》发布“改变世界”企业 阿里巴巴因农村战略位列中国第一
查看>>
[Hadoop]Hadoop本地调试
查看>>
DNS服务-主从架构搭建
查看>>
找油网获1.5亿美元融资:Rainbow Capital领投C1轮,普洛斯领投C2轮
查看>>
2017.10.1 AJAX技术对RESTful的前端实现
查看>>
流程控制(逻辑词汇)
查看>>
初识 Spring(04)---(bean属性)
查看>>
【ASP】循环
查看>>
2014 年度小结(Node.js 与 单元测试)
查看>>
Ceph编译安装教程
查看>>
Oracle总结【SQL细节、多表查询、分组查询、分页】
查看>>