QGraphicsView(图形视图)
QGraphicsView提供了视图部件,用来使场景中的内容可视化,可以连接多个视图到同一个场景中来为相同的数据集提供多个视口,视图部件是一个可滚动的区域,提供一个滚动条来浏览大的场景。
创建使用图形视图:
| setSence() | 设置需要显示的场景 |
| show() | 显示视图内容视图,将默认滚动到场景的中心 |
#include <QApplication>
#include<QGraphicsScene>
#include<QGraphicsView>
#include<QGraphicsItem>
#include<QPushButton>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QGraphicsScene scene(-200,-200,400,400);//创建一个场景
QGraphicsView view;//创建一个视图
view.setScene(&scene);//设置场景
view.show();//显示
return a.exec();
}

| resize() | 设置视图的大小 |
使用resize()可以重置视图的大小,如果视图大小小于场景大小,重置后会添加滑动条 。
QGraphicsScene scene(-200,-200,400,400);//创建一个场景
QGraphicsView view;//创建一个视图
view.setScene(&scene);//设置场景
view.resize(400,400);
view.show();//显示

修改视图背景:
一个场景有三层:
- ItemLayer 图形项层
- ForegroundLayer 前景层
- BackgroundLayer 背景层
场景的绘制重视从被级层开始。
| setForegroundBrush() | 设置前景色 |
| setBackgroundBrush() | 设置背景 |
QGraphicsScene scene(-200,-200,400,400);//创建一个场景
QGraphicsView view;//创建一个视图
view.setScene(&scene);//设置场景
view.setForegroundBrush(QColor(255,255,0,100));//设置前景色
view.setBackgroundBrush(QPixmap(":/image/img.jpg"));
view.show();//显示

使用多个视图显示内容:
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QGraphicsScene scene(-200,-200,400,400);//创建一个场景
QGraphicsView view;//创建第一个视图
view.setScene(&scene);//设置场景
view.setForegroundBrush(QColor(255,255,0,100));//设置前景色
view.setBackgroundBrush(QPixmap(":/image/img.jpg"));
view.resize(600,600);
view.show();//显示
QGraphicsView view2;//创第二个视图
view2.setScene(&scene);//设置场景
view2.setForegroundBrush(QColor(255,255,0,10));//设置前景色
view2.setBackgroundBrush(QPixmap(":/image/img.jpg"));
view2.resize(600,600);
view2.show();//显示
return a.exec();
}

也可以使用场景中的前景和背景:
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QGraphicsScene scene(-200,-200,400,400);//创建一个场景
scene.setForegroundBrush(QColor(255,255,0,100));//设置前景色
scene.setBackgroundBrush(QPixmap(":/image/img.jpg"));
QGraphicsView view;//创建第一个视图
view.setScene(&scene);//设置场景
view.resize(600,600);
view.show();//显示
QGraphicsView view2;//创第二个视图
view2.setScene(&scene);//设置场景
view2.resize(600,600);
view2.show();//显示
return a.exec();
}

QGraphicsView的函数:
| alignment() | 整个场景可见时场景中场景的对齐方式,默认居中 |
| cacheMode() | 缓存模式,保存缓存视图的哪些部分 |
| restCachedContent() | 重置所有缓存的内容。调用此函数将清除视图中的缓存 |
| centerOn() | 滚动视区的内容以确保场景坐标位置在视图中居中 |
| dargMode() | 拖动模式 |
| ensureVisible() | 滚动视区的内容,以便场景矩形矩形可见。如果无法访问指定的矩形,则内容将滚动到最近的有效位置。两个边距的默认值均为 50 像素 |
| fitlnView() | 缩放视图矩阵并滚动滚动条,以确保场景矩形矩形适合视口。rect 必须在场景内部,否则,fitInView() 不能保证整个矩形是可见的。 |
| setInteractive(bool allowed) | 设置是否允许页面交互,默认true |
| isTransFormed() restTransfrom() | 判断视图是否转换 将视图转换重置为单位矩阵 |
| itemAt() | 返回位于视口坐标中的位置位置的项。如果此位置有多个项目,则此函数返回最顶层的项目 |
| items() | 视图中位置位置的所有项的列表 |
| mapFromScene() | 将场景坐标返回到视口坐标。 |
| mapToScene() | 返回映射到场景坐标多边形的视区 |
| optimizationFlags() | 优化标志 |
| rotate() | 旋转 |
| scale() | 缩放 |
| shear(qreal sh,qreal sv) | 按 (sh, sv) 剪切当前视图转换 |
| translate(qreal sh,qreal sv) | 将当前视图转换转换为 (sh, sv) |
| rubberBandRect() | 用户当前正在使用橡皮筋进行项选择,则此函数返回当前橡皮筋区域 |
| scene() | 返回场景 |
| setTransfrom() | 将视图的当前转换矩阵设置为矩阵 |
对齐方式的使用:
QGraphicsView view;//创建第一个视图
view.setScene(&scene);//设置场景
view.setAlignment(Qt::AlignTop|Qt::AlignRight);对齐方式设置为右上角
view.resize(600,600);
view.show();//显示
cacheMode(缓存模式)
| QGraphicsView::CacheNone | 所有绘画都直接在视口上完成 |
| QGraphicsView::CacheBackground | 背景已缓存。这会影响自定义背景和基于 backgroundBrush()属性的背景。启用此标志后,QGraphicsView 将分配一个具有视区完整大小的像素图。 |
两者的区别:
缓存的目的是加快渲染速度较慢的区域的总渲染时间。例如,纹理、渐变和 Alpha 混合背景的渲染速度可能明显很慢;尤其是转换后的视图。但每次转换视图后缓存就会失效。
DragModel(拖动模式 )
此属性保存按下鼠标左键时将鼠标拖到场景上的行为
| QGraphicsView::NoDrag | 忽略操作 |
| QGraphicsView::ScrollHandDrag | 光标变为指向的指针,拖动鼠标将滚动条,适用于交互和非交互模式 |
| QGraphicsView::RubberBandDrag | 将出现橡皮筋。拖动鼠标将设置橡皮筋几何形状,并选择橡皮筋覆盖的所有项目。对于非交互式视图,此模式处于禁用状态 |
第二个参数的使用:
使用鼠标拖动视图
QGraphicsView view2;//创建视图
view2.setScene(&scene);//设置场景
view2.setDragMode(QGraphicsView::ScrollHandDrag);
view2.resize(400,400);
view2.show();//显示
return a.exec();

第三个参数的使用:
类似于截图,获取指定区域的项目
QGraphicsView view2;//创建第一个视图
view2.setScene(&scene);//设置场景
view2.setDragMode(QGraphicsView::RubberBandDrag);
view2.resize(400,400);
view2.show();//显示

fitlnView()的详细介绍:
QGraphicsView::fitInView(const QRectF &rect, Qt::AspectRatioMode aspectRatioMode = Qt::IgnoreAspectRatio)
- QRectF为区域,当该区域为空,或视图太小时,不会执行任何操作
- Qt::AspectRatioMode 纵横比模式
Qt::AspectRatioMode

| Qt::IgnoreAspectRatio | 大小可自由缩放。不保留纵横比。 |
| Qt::KeepAspectRatio | 在给定矩形内,大小将缩放到尽可能大的矩形,从而保留纵横比 |
| Qt::KeepAspectRatioByExpanding | 大小将缩放到给定矩形之外尽可能小的矩形,从而保留纵横比 |
rotate(旋转):
QGraphicsView view2;//创建第一个视图
view2.setScene(&scene);//设置场景
view2.rotate(60);//旋转60°
view2.resize(600,600);
view2.show();//显示

scale(缩放):
QGraphicsView view2;//创建第一个视图
view2.setScene(&scene);//设置场景
view2.scale(3,1);//缩放
view2.resize(600,600);
view2.show();//显示

QGraphicsView为视口小部件提供常规的QWidget,可以使用viewPort()来访问该小部件,也可以使用setViewport()来替换。
QGraphicsView是Qt库中的一个组件,用于显示QGraphicsScene场景。它可以实现多视图显示同一场景,支持视图的缩放、旋转、拖动等操作。文章介绍了如何创建和设置视图大小,调整背景颜色,以及使用不同的拖动模式。同时,提到了fitInView函数用于调整视图以适应场景内容,并展示了对齐方式、缓存模式和拖动模式的使用。
1280

被折叠的 条评论
为什么被折叠?



