[√]QGraphicsView / QGraphicsScene

简介: [√]QGraphicsView / QGraphicsScene

QGraphicsView 和 QGraphicsScene 是 Qt 图形框架中的两个重要类,用于创建和管理图形界面。它们之间的区别如下:

  1. 功能角色:
  • QGraphicsView:QGraphicsView 是一个可视化的视图窗口,用于显示 QGraphicsScene 中的图形项。它提供了具体的界面展示和用户交互功能,如缩放、平移、旋转等操作。
  • QGraphicsScene:QGraphicsScene 是一个二维场景,用于管理和组织图形项(QGraphicsItem)。它负责图形项的布局、排序、渲染以及接收和处理与输入设备相关的事件。
  1. 显示关系:
  • QGraphicsView 依赖于 QGraphicsScene,将 QGraphicsScene 中的图形项显示在其视图窗口中。通过设置 QGraphicsView 的场景属性,可以指定所使用的 QGraphicsScene 对象。
  • QGraphicsScene 可以存在独立于 QGraphicsView 的情况下,也就是说可以创建 QGraphicsScene 对象,但不将其连接到任何 QGraphicsView。
  1. 视图控制:
  • QGraphicsView 提供了各种视图控制功能,如缩放、平移和旋转。这使得你可以更改图形场景在视图中的显示方式,以适应用户的需求。
  • QGraphicsScene 则关注于图形项的管理和呈现,不直接控制视图的行为。它负责处理图形项的布局、更新和事件。

综上所述,QGraphicsView 是用于呈现 QGraphicsScene 中的图形项并提供用户交互功能的视图窗口,而 QGraphicsScene 则是用于管理和组织图形项的二维场景。

view可以理解为窗户,scene就是窗户外的世界。

scene只可能被item撑得更大,不能自动变小。

cebterOn

centerOn就是将view的中心点和scene的哪个位置对齐,就像摄像机转向世界的某一个位置,所以centerOn的参数就是scene的坐标位置

void ImageViewer::mousePressEvent(QMouseEvent* event)
{
    qDebug() << event->pos();
    qDebug() << "width:" << this->width() << ", height:" << this->height();
}

event->pos()的坐标系是基于ImageViewer的坐标系,也就是event->pos()的最大值就是width,height。

2种方式效果都是等价的

// 方式1
QTransform transform = this->transform();
this->setTransform(transform.scale(scaleFactor, scaleFactor));
// 方式2
this->scale(scaleFactor, scaleFactor);
int width = this->viewport()->width(); // this->widht和this->viewport()->withd是不相等的,因为有边框
int height = this->viewport()->height();
QPointF center = this->mapToScene(QPoint(width / 2.0, height / 2.0));
QPointF offset = center - sceneMousePos;
this->centerAnchor = sceneMousePos + offset;
this->centerOn(this->centerAnchor);
目录
相关文章
|
缓存 Ubuntu JavaScript
踩坑记录:QML加载图片资源
踩坑记录:QML加载图片资源
2468 0
|
Web App开发 HTML5 移动开发
谷歌浏览器Chrome播放rtsp视频流解决方案
代码中的具体参数含义,大家可以移步这里: https://wiki.videolan.org/Documentation:WebPlugin/   找半天,HTML5的可以支持RTMP 但是无法播放RTSP,flash也止步于RTMP,最后同事推荐了个开源的好东东 VLC ,请教谷歌大神之后,这货果然可以用来让各浏览器(IE activex方式,谷歌、FF)实现播放RTSP视频流,那真是极好的~~ 废话不多说了附上参考文档和案例,大家自己看吧。
11333 1
|
消息中间件 NoSQL 数据处理
如何进行实时数据处理:技术深度剖析
【8月更文挑战第25天】实时数据处理是现代企业不可或缺的能力之一,它要求系统具备高吞吐量、低延迟、高可用性和可扩展性。通过合理的架构设计、技术选型和持续优化,可以构建出满足业务需求的实时数据处理系统。未来,随着技术的不断进步和应用场景的不断拓展,实时数据处理将在更多领域发挥重要作用。
1226 3
|
12月前
|
存储 API UED
鸿蒙特效教程02-微信语音录制动画效果实现教程
本教程适合HarmonyOS初学者,通过简单到复杂的步骤,一步步实现类似微信APP中的语音录制动画效果。
464 0
鸿蒙特效教程02-微信语音录制动画效果实现教程
《QT从基础到进阶·二十一》QGraphicsView、QGraphicsScene和QGraphicsItem坐标关系和应用
《QT从基础到进阶·二十一》QGraphicsView、QGraphicsScene和QGraphicsItem坐标关系和应用
2953 1
《QT从基础到进阶·二十一》QGraphicsView、QGraphicsScene和QGraphicsItem坐标关系和应用
|
人工智能 C++
初步编译QT5.15.2+VS2019+VTK8.2.0
本文介绍了在VS2019中编译QT 5.15.2和VTK 8.2.0的过程,包括编译结果、cmake库编译配置和cmake应用配置脚本,以及推荐的参考链接。
823 4
|
数据可视化
【Qt 学习笔记】Qt窗口 | 菜单栏 | QMenuBar的使用及说明
【Qt 学习笔记】Qt窗口 | 菜单栏 | QMenuBar的使用及说明
4388 3
|
前端开发 C++ Windows
C++生成QML代码与QML里面集成QWidget
这篇文章介绍了如何在C++中生成QML代码,以及如何在QML中集成QWidget,包括使用Qt Widgets嵌入到QML界面中的技术示例。
751 0
|
算法 计算机视觉
【Qt&OpenCV QGraphicsView显示OpenCV读入的图片】
【Qt&OpenCV QGraphicsView显示OpenCV读入的图片】
353 0

热门文章

最新文章