[√]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);
目录
相关文章
|
前端开发 JavaScript 容器
使用CSS 怎么改网格布局上下行的顺序
Flex 布局是一种简单而灵活的布局方式,通过设置父容器的 display: flex 属性,可以方便地控制子元素的排列方式、对齐和间距等。它适用于一维排列的情况,比如横向或纵向的列表、导航栏等。 Grid 布局则是一种更为复杂的布局方式,可以将网页划分为等大小的网格,并通过设置网格的属性来定义子元素的位置。它适用于二维排列的情况,比如网格状的图像展示、多列的表格等。
|
Web App开发 HTML5 移动开发
谷歌浏览器Chrome播放rtsp视频流解决方案
代码中的具体参数含义,大家可以移步这里: https://wiki.videolan.org/Documentation:WebPlugin/   找半天,HTML5的可以支持RTMP 但是无法播放RTSP,flash也止步于RTMP,最后同事推荐了个开源的好东东 VLC ,请教谷歌大神之后,这货果然可以用来让各浏览器(IE activex方式,谷歌、FF)实现播放RTSP视频流,那真是极好的~~ 废话不多说了附上参考文档和案例,大家自己看吧。
11020 1
|
9月前
|
机器学习/深度学习 人工智能 编解码
月之暗面开源16B轻量级多模态视觉语言模型!Kimi-VL:推理仅需激活2.8B,支持128K上下文与高分辨率输入
月之暗面开源的Kimi-VL采用混合专家架构,总参数量16B推理时仅激活2.8B,支持128K上下文窗口与高分辨率视觉输入,通过长链推理微调和强化学习实现复杂任务处理能力。
690 5
月之暗面开源16B轻量级多模态视觉语言模型!Kimi-VL:推理仅需激活2.8B,支持128K上下文与高分辨率输入
|
10月前
|
存储 API UED
鸿蒙特效教程02-微信语音录制动画效果实现教程
本教程适合HarmonyOS初学者,通过简单到复杂的步骤,一步步实现类似微信APP中的语音录制动画效果。
416 0
鸿蒙特效教程02-微信语音录制动画效果实现教程
《QT从基础到进阶·二十一》QGraphicsView、QGraphicsScene和QGraphicsItem坐标关系和应用
《QT从基础到进阶·二十一》QGraphicsView、QGraphicsScene和QGraphicsItem坐标关系和应用
2705 1
《QT从基础到进阶·二十一》QGraphicsView、QGraphicsScene和QGraphicsItem坐标关系和应用
|
消息中间件 NoSQL 数据处理
如何进行实时数据处理:技术深度剖析
【8月更文挑战第25天】实时数据处理是现代企业不可或缺的能力之一,它要求系统具备高吞吐量、低延迟、高可用性和可扩展性。通过合理的架构设计、技术选型和持续优化,可以构建出满足业务需求的实时数据处理系统。未来,随着技术的不断进步和应用场景的不断拓展,实时数据处理将在更多领域发挥重要作用。
1133 3
|
数据可视化
【Qt 学习笔记】Qt窗口 | 菜单栏 | QMenuBar的使用及说明
【Qt 学习笔记】Qt窗口 | 菜单栏 | QMenuBar的使用及说明
4003 3
|
存储 监控 图形学
【QT】GraphicsView、QGraphicsScene、QGraphicsEllipseItem的使用
【QT】GraphicsView、QGraphicsScene、QGraphicsEllipseItem的使用
1330 0
|
机器学习/深度学习 算法 测试技术
如何应对缺失值带来的分布变化?探索填充缺失值的最佳插补算法
该文探讨了缺失值插补的不同方法,比较了它们恢复数据真实分布的效果。文章指出,处理插补尤其在小样本或复杂数据时是个挑战,需要选择能适应数据分布变化的方法。文中介绍了完全随机缺失(MCAR)、随机缺失(MAR)和非随机缺失(MNAR)三种机制,并以一个简单的例子展示了数据分布变化。文章通过比较均值插补、回归插补和高斯插补,强调了高斯插补在重现数据分布方面更优。评估插补方法时,不应仅依赖于RMSE,而应关注分布预测,使用如能量距离这样的指标。此外,即使在随机缺失情况下,数据分布也可能因模式变化而变化,需要考虑适应这些变化的插补方法。
645 2
(5)Qt中的日期和时间
本文介绍了Qt中处理日期和时间的类QDate、QTime和QDateTime,包括它们的格式化选项、构造函数、公共成员函数以及如何进行日期和时间的增减、比较,同时提到了QElapsedTimer作为QTime的替代品用于计时。
692 0

热门文章

最新文章