QT QGraphicsScene / QGraphicsView中 sceneRect 使用详细说明

article/2025/11/3 23:03:28

接触QT不久,发现QT的Graphics View框架坐标使用和平常不一样,尤其sceneRect的作用。
官方文档关于这部分介绍真是蛋疼,网上说的也寥寥。没法自己研究了一下,其实这块内容QT设计的很方便,只是文档讲解的太烂,总结如下:

qt的Graphics View 框架主要用于大量2d绘制的场合。qt graphics view 框架主要由三部分组成:View(QGraphicsView),Scene(QGraphicsScene)、Item(QGraphicsItem)。这也是一个典型的Model/View模式应用。

1)sceneRect的作用:

sceneRect和显示密切相关,QGraphicsView使用sceneRect来决定如何显示QGraphicsScene。

1、如果sceneRect的宽度(width)大于等于QGraphicsView视口宽度:

      QGraphicsView调整View的宽度为sceneRect的宽度大小。(大于的情况会自动添加滚动条);

     此时View的左上角对应sceneRect的左上角,View的右下角对应sceneRect右下角。该情况下QGraphicsView的alignment不起作用。

     高度判断同理!

    如:View窗口:左上角(0,0)  宽=1800,高=1000 ;

        sceneRect: 左上角(-200, -100),宽=2000,高=1100;

       View的窗口会通过滑动条扩展为 宽=2000,高=1100;(阴影部分)

 


2、如果sceneRect的宽度(width)小于QGraphicsView视口宽度:

QGraphicsView根据 alignment/setAlignment设定来显示,默认让sceneRect居中(Qt::AlignCenter),这对于显示单张图片很好用。  也可以使用QGraphicsView::setAlignment(Qt::AlignLeft | Qt::AlignTop)设置为左上角对齐,画图比较好用。

高度判断同理!


2)sceneRect的确定:

QGraphicsView有sceneRect/setSceneRect函数,Scene也有sceneRect/setSceneRect函数,如何确定View的sceneRect呢?

查下源代码,一目了然,它们的关系如下:
  1、如果 View设定了sceneRect,则使用View的sceneRect;(尽量使用View的setSceneRect函数,尤其多视口显示只能如此)
  2、如果 View没有设定 sceneRect,则使用 Scene设置的 sceneRect;
  3、如果Scene没有设置 sceneRect,则使用Scene的外包围盒(boundRect);(默认使用)

 

3)常用方法

1)默认情况下,QGraphicsView使用Scene外包,QGraphicsView居中对齐(Qt::AlignCenter), 所以 添加到Scene的Item会自动居中。如果Scene只有一个Item,居中这样很不错。

2)如果scene添加多个Item,默认行为居中行为就比较怪异了,最好让scene和view的原点对齐。使用QGraphicsView::setAlignment(Qt::AlignLeft | Qt::AlignTop)设置为左上角对齐。如果添加的item使得包围盒大于View的宽高,滚动条自动出现。如果永远都不希望出现滚动条需要将sceneRect设置为比View的宽高小的值。

如:QGraphicsView::setSceneRect(0, 0, 10, 10); // 后面是10, 100都无所谓,设置了就行,只要不大于view的宽高就不会出现滚动条。当然超出View宽高(注意不是sceneRect)的Item是看不见的。


http://chatgpt.dhexx.cn/article/RVC0PVA4.shtml

相关文章

【QT】GraphicsView、QGraphicsScene、QGraphicsEllipseItem的使用

GraphicsView、QGraphicsScene、QGraphicsEllipseItem的使用 前言实验目的重构GraphicsView类新建GraphicsView、QGraphicsScene层绘制Item图形控件绘制圆形绘制矩形绘制三角形绘制文字绘制直线 组合、打散、前置和后置组合打散控件前置控件后置 绑定功能事件总结 前言 对于绘…

Qt 绘图之QGraphicsScene QGraphicsView QGraphicsItem详解

Graphics View提供了一个界面,它既可以管理大数量的定制2D graphical items,又可与它们交互,有一个view widget可以把这些项绘制出来,并支持旋转与缩放。这个柜架也包含一个事件传播结构,对于在scene中的这些items,它具…

PyQt5:QGraphicsScene入门一:基本介绍、场景定义、添加元素

为什么80%的码农都做不了架构师?>>> 简介说明: 这个QGraphicsScene类用于在场景中操作大量的2D图形元素,这个类是作为一个容器QGraphicsItems存在的,它是连同QGraphicsView用于可视化的二维表面的图形项目,如直线,矩形,文本,甚至定制物品;还可以有效地…

QGraphicsView,QGraphicsScene和QGraphicsItem

图形视图框架提供了一个基于图形项的模型视图编程方法,主要由场景、视图和图形项三部分组成,这三部分分别由QGraphicsScene、QGraphicsView和QGraphicsItem这三个类来表示。 场景QGraphicsScene QGraphicsScene类提供绘图场景(Scene&#…

Qt图形视图框架:QGraphicsScene详解

一、描述 1、场景提供了一个用于管理大量2D图形项的平面。该类充当图形项的容器。 它与视图一起用于可视化2D曲面上的图形图形项。 2、场景没有自己的视觉外观,只负责管理图形项。 3、场景的最大优势之一就是其快速有效地定位图形项的能力。即使场景中有数百万个…

Qt开发技术:图形视图框架(二)场景QGraphicsScene、QGraphicsItem与QGraphicsView详解

若该文为原创文章,转载请注明原文出处 本文章博客地址:https://hpzwl.blog.csdn.net/article/details/117660217 长期持续带来更多项目与技术分享,咨询请加QQ:21497936、微信:yangsir198808 红胖子(红模仿)的博文大全&#xff1…

TLS、SSL原理解析

TLS、SSL https协议就是建立在TLS、SSL之上的。

SSL证书原理讲解

SSL证书原理讲解 - 2240930501 - 博客园一直以来都对数字证书的签发,以及信任等事情一知半解。总算有个闲适的周末来总结和深入一下相关的知识。 CA: CA(Certificate Authority)是证书的签发机构,它是负责管理和签发证书的https://www.cnblogs.com/dingl…

浅谈SSL/TLS工作原理

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 浅谈SSL/TLS工作原理 SSL对称加密非对称加密定义工作过程特点及性能分析非对称加密常用算法举例 非对称加密和对称加密各自有啥优缺点?CA(Certificate…

SSL工作原理介绍以及java实现

SSL工作原理介绍以及java实现 目录 SSL工作原理介绍以及java实现 SSL简介SSL工作原理 握手协议Handshake protocol 1握手阶段使用RSA加密算法2握手阶段使用Diffie-Hellman加密算法记录协议Record protocol警报协议Alert protocolWireshark抓包图解java实现Secure Sockets Laye…

SSL证书原理是什么?ssl证书工作流程是什么

SSL证书的运用促使网址更加安全性,做为一种加密传输协议书技术性。SSL的挥手协议书让顾客和集群服务器进行彼此之间的身份验证。为了让各位能进一步了解ssl证书,小编来向各位介绍SSL证书原理。 SSL证书原理如下: ①手机客户端向网络服务器恳…

SSL 工作原理

博客引用处(以下内容在原有博客基础上进行补充或更改,谢谢这些大牛的博客指导): SSL工作原理 首先说明下SSL工作原理: 1.1 产生背景 基于万维网的电子商务和网上银行等新兴应用,极大地方便了人们的日常生活…

SSL原理介绍

SSL原理介绍 SSL——安全套接字层(Secure Sockers Layer)协议由著名的Netscape公司开发。为了保证通信双方建立安全可靠的传输隧道,SSL使用PKI中的数字证书技术对通信双方进行身份认证;使用对称加密来保证数据保密性;使…

ssl 原理和建立连接过程

ssl 与http关系 ssl (“Secure Sockets Layer”)加密原理 和https的关系 https http ssl ssl 位置: SSL握手 证书主要作用是在SSL握手中,我们来看一下SSL的握手过程 客户端提交https请求服务器响应客户,并把证书公钥发给客户端客户端验…

SSL/TLS 的工作原理

HTTPS 之所以能达到较高的安全性要求,就是结合了 SSL/TLS 和 TCP 协议,对通信数据进行加密,解决了 HTTP 数据透明的问题。接下来重点介绍一下 SSL/TLS 的工作原理。 SSL 和 TLS 的区别? SSL 和 TLS 没有太大的区别。 SSL 指安全套接字协议(Secure Sockets Layer),首次…

SSL工作原理

公钥和私钥 一直以来对公钥和私钥都理解得不是很透彻,感觉到模棱两可。今天在网上找了半天,通过查看对这个密钥对的理解,总算弄清楚了。 公钥和私钥就是俗称的不对称加密方式,是从以前的对称加密(使用用户名与…

SSL技术原理

SSL详解 建议直接看这:https://cshihong.github.io/2019/05/11/SSL-VPN%E6%8A%80%E6%9C%AF%E5%8E%9F%E7%90%86/ SSL [虚拟专用网络]的技术主要用到了SSL技术。有关SSL具体技术,可以参考: SSL/TLS协议详解 SSL [虚拟专用网络]简介 SSL [虚拟专…

SSL协议原理详解

SSL 可参考:SSL技术原理 SSL简介 SSL和TLS: SSL (Secure Sockets Layer)安全套接层。是由Netscape公司于1990年开发,用于保障Word Wide Web(WWW)通讯的安全。主要任务是提供私密性,信息完整性…

SSL协议原理

文章目录 SSL协议原理SSL协议结构SSL原理(握手协议)SSL握手协议第一阶段客户端Client Hello数据包服务端server Hello数据包 SSL握手协议第二阶段**Certificate消息数据包**Server Key Exchange消息数据包ServerHello Done数据包 SSL握手协议第三阶段Cli…

关于SSL原理的详解

关于SSL原理的详解 SSL原理详解一、SSL是什么?二、建立SSL通道过程1.简化篇2.具体建立过程 总结 SSL原理详解 其实SSL从网上看到的资料很多了,但是发现还是没有将原理讲得特别清楚,尤其是对CA,433端口与80端口的数据传输原理&…