[√]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);
目录
相关文章
|
8月前
|
XML 设计模式 JSON
QT 项目视图(QListView&QTreeView&QTableView)和项目部件(QListWidget&QTreeWidget&QTableWidget)详解-1
QT 项目视图(QListView&QTreeView&QTableView)和项目部件(QListWidget&QTreeWidget&QTableWidget)详解
|
8月前
|
数据库 开发者 Windows
QT 项目视图(QListView&QTreeView&QTableView)和项目部件(QListWidget&QTreeWidget&QTableWidget)详解-2
QT 项目视图(QListView&QTreeView&QTableView)和项目部件(QListWidget&QTreeWidget&QTableWidget)详解
|
7月前
QT布局管理器
QT布局管理器
|
7月前
Qml:鼠标事件
Qml:鼠标事件
|
8月前
|
存储 监控 图形学
【QT】GraphicsView、QGraphicsScene、QGraphicsEllipseItem的使用
【QT】GraphicsView、QGraphicsScene、QGraphicsEllipseItem的使用
432 0
|
存储 Cloud Native Linux
Qt QSlider样式
Qt QSlider样式
Qt之滑动条和进度条(QSlider、QProgressBar)
Qt之滑动条和进度条(QSlider、QProgressBar)
1995 1
解决QT QGraphicsView提升到QChartView报错的问题
使用QT提供的QChartView来绘制图表,提升QGraphicsView控件继承QChartView后,然后将QGraphicsView提升到我们自己写的类,怎么才能确保提升后编译不报错呢。
216 0
Qt布局管理器(QHBoxLayout,QVBoxLayout)
Qt布局管理器(QHBoxLayout,QVBoxLayout)
243 0
|
存储 缓存 数据可视化
Qt开发技术:图形视图框架(二)场景QGraphicsScene、QGraphicsItem与QGraphicsView详解
Qt开发技术:图形视图框架(二)场景QGraphicsScene、QGraphicsItem与QGraphicsView详解
Qt开发技术:图形视图框架(二)场景QGraphicsScene、QGraphicsItem与QGraphicsView详解