qt Graphic View 学习
是一种基于图形项的(Graphic Item)模型/视图模式。
由场景、视图、图形项组成。
1.场景:QGraphicScence类,
场景不可见,是管理图像项的容器。
场景坐标:等价于Qpainter的逻辑坐标,一般以场景的中心为原点。
主要函数
1.QGraphicsItemGroup *createItemGroup(const QList<QGraphicsItem *> &items); //创建图形项组
2.void destroyItemGroup(QGraphicsItemGroup *group);
3.QGraphicsItem *focusItem() const;获取当前焦点的图形项
4.void addItem(QGraphicsItem *item); //添加图形项
5.void removeItem(QGraphicsItem *item); //删除图形项
6.QGraphicsLineItem *addLine(const QLineF &line, const QPen &pen = QPen());//添加直线,其他的图像项类似
7.QGraphicsItem *itemAt(const QPointF &pos, const QTransform &deviceTransform) const;//获取某个位置的顶层图形项
8. QList<QGraphicsItem *> items(const QRectF &rect, Qt::ItemSelectionMode mode = Qt::IntersectsItemShape, Qt::SortOrder order = Qt::DescendingOrder, const QTransform &deviceTransform = QTransform()) const;
9.QList<QGraphicsItem *> selectedItems() const;//选中的图形项列表
10.void clearSelection();清除选中列表
2.视图:QgraphicView类,其基类为QWideget,所以很多操作函数都有
用于显示场景的内容,当视图比场景小时,提供卷滚条移动。
用来接收键盘和鼠标输入信号。
视图坐标:和设备坐标相同,是物理坐标。缺省以左上角为原点((0,0)。单位是像素,只跟widget或视口有关,与场景无关。
坐标映射:
1.将视图坐标转化为场景坐标: QGraphicScence 类的 QPointF mapToScene(const QPoint &point) const;
2.将场景坐标转化为视图坐标:QGraphicScence 类的 QPoint mapFromScene(const QPointF &point) const;
可以进行平移、旋转、缩放等变换。
void rotate(qreal angle);
void scale(qreal sx, qreal sy);
void shear(qreal sh, qreal sv);
void translate(qreal dx, qreal dy);
主要函数:
1.void setScene(QGraphicsScene *scene); //设置关联显示的场景
2.inline void setSceneRect(qreal x, qreal y, qreal w, qreal h); //设置关联的场景在视图的矩形区域
3.QGraphicsItem *itemAt(const QPoint &pos) const; //获取视图坐标的某一位置的图形项, (直接通过视图找到图形项,应该要在场景中设置好)
4.QList<QGraphicsItem *> items(const QPoint &pos) const;//
5.void setBackgroundBrush(const QBrush &brush);
6.QTransform transform() const;
3.图形项:QGraphicsItem类。
图像项坐标:局部的逻辑坐标,一般以图件的中心为原点。其中心为(0,0)。
一个图形项的位置是其中心点在父坐标系统的坐标,对于没有父图形项的图形项,其父对象就是场景,
图形项的位置就是在场景中的坐标。
每个图形项在场景都有一个坐标,有函数QGraphicsItem::scenePos。
QGraphicsItem为基类,以下为常见的子类
QGraphicsLineItem:提供了一个直线项
QGraphicsPixmapItem:提供了一个图像项
QAbstractGraphicsShapeItem:
QGraphicsSimpleTextItem:提供了一个简单的文本标签项
QGraphicsRectItem:提供了一个矩形项
QGraphicsEllipseItem:提供了一个椭圆项
QGraphicsPathItem:提供了一个路径项
QGraphicsPolygonItem:提供了一个多边形项
QGraphicsObject:
QGraphicsTextItem:提供了一个格式化的文本项
QGraphicsItemGroup :组合
主要函数:
1、void setFlags(GraphicsItemFlags flags); //设置图形项的操作属性,可选择,可移动,可焦点。 ItemIsMovable = 0x1,
ItemIsSelectable = 0x2, ItemIsFocusable = 0x4,
2.QPointF pos() const;
3.void setPos(const QPointF &pos);
4.qreal zValue() const;
5.void setZValue(qreal z);
6.QPointF mapFromScene(const QPointF &point) const;
7.QPointF mapToScene(const QPointF &point) const;
8.void setData(int key, const QVariant &value);
9.QVariant data(int key) const;
10.void setRotation(qreal angle);
11.void setScale(qreal scale);
qt Graphic View 学习相关推荐
- Qt Model/View 学习(4) - 实现自己的QAbstractTableModel类(支持显示与修改)
目录 0. 前言 1. Data设计 2. Model类设计 2.1 数据显示与对齐.字体修改 2.2 数据修改 3. 小结 0. 前言 可算到了这一篇了! 上一篇文章中把Qt::ItemDataRo ...
- Qt学习笔记-Qt Graphic View Framework
逻辑: 1.创建一场景 -> QGraphicsScene 2.创建一个视图 -> QGraphicsView 3.往场景添加Item -> QGraphicsSimpleTextI ...
- Qt Model/View 学习笔记 (四)
创建新的Models 介绍 model/view组件之间功能的分离,允许创建model利用现成的views.这也可以使用标准的功能 图形用户接口组件像QListView,QTableView和Q ...
- Qt 小例子学习26 - 画网格
Qt 小例子学习26 - 画网格 GraphicsScene.h #ifndef GRAPHICSSCENE_H #define GRAPHICSSCENE_H#include <QGraphi ...
- Qt 小例子学习8 - 选择器
Qt 小例子学习7 - 选择器 dialog.cpp #include "dialog.h" #include "ui_dialog.h"#include &l ...
- Qt Model/View(MVD)模型分析
最近在看Qt的Model/View Framework,在网上搜了搜,好像中文的除了几篇翻译没有什么有价值的文章.E文的除了Qt的官方介绍,其它文章也很少.看到一个老外在blog中写道M ...
- QT Model/View 编程:MVC模型视图编程:实例实现(二)
目录 样例001:现有模型中使用视图Using views with an existing model 样例002:使用模型索引 样例003:使用模型 样例004:使用模型的多个视图 样例005:委 ...
- android自定义View学习(一)----创建一个视图类
创建一个视图类 精心设计的自定义视图与其他精心设计的类非常相似.它使用易于使用的界面封装了一组特定的功能,它可以高效地使用CPU和内存,等等.不过,作为一个设计良好的班级,自定义视图应该: 符合And ...
- (一) Qt Model/View 的简单说明
目录: (一) Qt Model/View 的简单说明 .预定义模型 (二)使用预定义模型 QstringListModel例子 (三)使用预定义模型QDirModel的例子 (四)Qt实现自定义模型 ...
- 自定义View学习之仿QQ运动步数进度效果
自定义View学习的小记录之第一篇 自定义View学习之QQ计步器 如何实现 1.分析想要得到什么效果 2.确定自定义属性,编写attrs.xml 3.在布局中使用 4.在自定义View中获取自定义属 ...
最新文章
- Swift直接解析YApi接口为模型
- 解决IntelliJ无法导入maven包的问题
- 训练、标注成本节省90%!华为云自动化AI开发平台ModelArts 3.0发布,从训练数据到模型落地一站式打通...
- 一个架构师谈什么是架构以及怎么成为一个架构师--转载
- pbr 多出口_PBR+多出口NAT+IP SLA
- php上传预览源码,php批量上传五[带预览]-PHP源码
- Qt实践|HTTP知识点-使用百度AI语音识别服务
- 建筑建模学习笔记2——3DMax房屋框架建模
- python输入三次密码程序_请教各位大神,为啥以下代码输入修改密码后连输错三次还是能输入...
- java布尔类型比较器_浅谈Java中几种常见的比较器的实现方法
- 和ufs_宏旺半导体告诉你手机eMMC和UFS到底是什么意思?有什么区别?
- 流媒体服务器Wowza Streaming Engine 4安装升级教程
- php 公众号 群发,php实现微信公众号无限群发
- 发送邮件被对方服务器退回_如何更好地给老外发邮件,可以了解下
- h5新语义化标签(重要)
- Android 内存卡 / Micro SD 卡 / TF 卡 / 存储卡 剩余容量 / 剩余内存 / 可用空间、总容量的 2 种获取方式
- 痛心!中兴通讯子公司研发工程师跳楼坠亡...
- 数据挖掘之关联规则挖掘的一些定义
- mysql导入sql文件、数据库时报错ERROR: ASCII '\0' appeared in the statement
- [经验分享] 分享一波超级良心、好用的趣味网站!