QGraphicsView
以下简称:view
功能描述:提供一个小部件,用于显示QGraphicsScene的内容。要创建带有几何(形状:圆形、方形、二维三维等)场景,需要参考QGraphicsScene。view也是 Graphics View Framework的一部分。
可视化场景:
- 构造view对象,将可视化的场景(QGraphicsScene)地址传递给view;
- 也可以调用setScene(),在之后设置场景;
- show() view将滚动到场景中心,显示可见项目。
QGraphicsScene scene;
scene.addText("hello");
QGraphicsView view(&scene);
view.show();
场景可见位置设定:
- 使用滚动条滚动到场景中的任何位置;
- 将一个点传递给centerOn()函数,view将滚动视口确保该点剧中;
- 如果想确保某个区域可见,可调用sureVisible()。
view可以显示整个场景或者场景中的一部分。默认情况,第一次显示scene会自动检测可视区域(调用:QGraphicsScene :: itemsBoundingRect()函数)。可以手动设置可视区域:view的setSceneRect()。当前手动设置时滚动条理论可以支持无限大小。但不会超过整数的最大值,最小值。
view调用render()展示场景。如果要改变绘画时view传递给QPainter的默认渲染提示:可以调用setRenderHints();
QPainter painter(this);
painter.setRenderHint(QPainter:: Antialiasing, true); //设置渲染,启动反锯齿
painter.setPen( QPen(QColor(11,67,127),3));
painter.drawEllipse(40.0, 40.0, 100.0, 100.0); //半径为50的圆
//链接地址:https://www.cnblogs.com/lifexy/p/9203929.html
默认情况view提供常规的QWidget展示场景,可以通过viewport()访问QWidget,也可通过setViewport()替换默认QWidget。要使用OenGL渲染,只需要调用setViewport(new QGLWidget)。view拥有窗体的所有权。
view使用QTransform支持仿射变换,可以传递矩阵setTransform变换,或者使用便捷的函数:
- rotate() 旋转
- scale() 缩放
- translate() 转换
- shear() 裁剪
最常用的是缩放和旋转。view转换期间视图中心保持不变。由于设置场景对齐(setAligment()),平移视图不会产生视觉影响。
可以使用鼠标、键盘和场景中的元素交互。view将事件封装了(QGraphicsSceneEvent)。可以对封装后的事件监听完成选取、拖拽、移动等。默认情况交互功能处于启用状态,可以通过setInteractive()切换。
view提供映射函数:
- mapToScene()
- mapFromScene()
- items()
- itemAt()
等函数方便视图坐标和场景坐标转换、查找场景元素等。
Header: | #include <QGraphicsView> |
qmake: | QT += widgets |
Since: | Qt 4.2 |
Inherits: | QAbstractScrollArea |
枚举类型:
Cache:缓存
描述了为View的缓存模式设置的标志:
- CacheNone 所有的绘画都直接在视口上完成
- CachBackground 后台被缓存。会影响自定义背景以及使用backgroundBrush属性的背景。启用此标志,View将分配一个具有整个视口大小的像素图
描述在view拖动鼠标时做的默认动作:
- NoDrag 什么也不做
- ScrollHandDrag 光标变为手指,拖动鼠标将滚动滚动条。在交互/非交互模式(不是用户点击鼠标等,可以是程序拖动,总之没有人机交互)都生效。
- RubberBandDrag 出现橡皮筋框(类似截图时出现的小框),拖动鼠标将扩大区域并选中覆盖的场景元素。非交互下禁用此模式。
描述了可以用于改善渲染性能的一些标志,默认未启用,因为可能会产生副作用,不同绘制设备、平台可能有所不同。
- DontClipPainter 已过期无效标识
- DontSavePainterState 不要启用保存状态,保持状态的意思是调用QPainter::setPen()/setBrush()不用在绘画结束后回复状态。
- DontAdjustForAntialiasing 禁用view的曝光区域抗锯齿自动调节功能,能够提高性能,副作用是使用抗锯齿绘制的项目在移动时会在场景留下绘画痕迹。
- IndirectPainting 恢复旧的绘制算法,兼容旧代码
描述当用户调整视图大小或者转换视图时view可使用的锚点。
- NoAnchor 没有锚点,场景位置保持不变
- AnchorViewCenter 场景中心点作为锚点
- AnchorUnderMouse 鼠标点被用于锚点
描述场景中内容如果改变view的更新方式
- FullViewportUpdate 任何内容改变view将更新整个视口,这种更新很快,也是首选更新方式
- MinimalViewportUpdate 将对最小视口区域进行重回,避免绘制未更改的区域,最大程度减少绘制时间(如果场景有许多细微变化,将花费更多时间寻找最小视口)。这是默认模式
- SmartViewportUpdate view会分析重绘区域从而找到最佳的更新模式
- BoundingRectViewportUpdate 设定区域边界矩形内容重绘,优势在于手动设定某一个区域
- NoViewportUpdate 场景改变,view不会自动更新,需要用户控制所有更新
alignment() setAlignment(Qt::Alignment alignment) | 对齐方式设置: Qt::AlignLeft、 Qt::AlignTop、 Qt::AlignCenter |
backgroundBrush() setBackgroundBrush(const QBrush &brush) | 设置背景刷(更改背景颜色) |
setCacheMode(QGraphicsView::CacheMode mode) | 缓存模式设置 |
setDragMode(QGraphicsView::DragMode mode) | 抓取模式设置 |
setForegroundBrush(const QBrush &brush) | 前景色设置 |
setInteractive(bool allowed) | 视图允许场景交互设置 启动:允许交互(鼠标、按键等) 关闭:忽视任何交互事件 |
setRenderHints(QPainter::RenderHints hints) | 设置默认提示:抗锯齿、平滑变换 QPainter::Antialiasing QPainter::SmoothPixmapTransform |
setRubberBandSelectionMode(Qt::ItemSelectionMode mode | 设置橡皮筋选择矩形(类似裁剪时的虚线框)
|
setSceneRect(const QRectF &rect) | 设置可视化场景区域 |
setViewportUpdateMode(QGraphicsView::ViewportUpdateMode mode) | 设置场景更新模式 |
其它参考Qt源码。