图形/视图架构有 3 个有效的坐标系:场景坐标系、视图坐标系、图形项坐标系。
视图坐标系
视图坐标系就是视图组件的物理坐标系,单位是像素。QGraphicsView 视口的左上角坐标总是(0,0)。
场景坐标系
场景坐标系定义了所有图形项的基础坐标,场景坐标系描述了每个顶层图形项的位置。
scene= new QGraphicsScene(-400,-300,800,600);
定义了一个左上角坐标为(-400,-300)、宽度为 800 像素、高度为 600 像素的矩形区
域,单位是像素。
图形项方法-QGraphicsIteml类
图形项属性 | void setFlags() void setFlag() void setOpacity() qreal opacity() void setGraphicsEffect() void setSelected() bool isSelected() void setData() void setEnabled() bool isEnabled() void show() void hide() | 设置图形项的操作标志,例如可选择、可移动等 启用或禁用图形项的某个标志 设置透明度 返回图形项的透明度, 0 表示透明, 1 表示完全不透明 设置图形效果 设置图形项是否被选中 图形项是否被选中 设置用户自定义数据 启用或禁用图形项。禁用的图形项是可见的,但是不能接收任何事件 返回图形项的使能状态 显示图形项 隐藏图形项 |
bool isVisible() | 图形项是否可见 | |
void setX() | 设置图形项的 x 坐标 | |
坐标 | void setY() void setZValue() void setPos() | 设置图形项的 y 坐标 设置图形项的 Z 值, Z 值控制图形项的叠放次序 设置图形项在父图形项中的位置 |
QPointF scenePos() | 返回图形项在场景中的坐标,相当于调用函数 mapToScene(0, 0) | |
void resetTransform() | 复位坐标系,取消所有坐标变换 | |
坐标变换 | void setRotation() | 旋转一定角度,参数为正数时表示顺时针旋转 |
void setScale() | 按比例缩放,默认值为 1 | |
QPointF mapFromItem() QPointF mapFromParent() QPointF mapFromScene() QPointF mapToItem() QPointF mapToParent() | 将另一个图形项的一个点映射到本图形项的坐标系中 将父图形项的一个点映射到本图形项的坐标系中 将场景中的一个点映射到本图形项的坐标系中 将本图形项的一个点映射到另一个图形项的坐标系中 将本图形项的一个点映射到父图形项的坐标系中 | |
坐标映射 | QPointF mapToScene() | 将本图形项的一个点映射到场景坐标系中 |
场景事件、方法-QGraphicsScene 类
void setSceneRect() | 设置场景的矩形区域 | |
void setBackgroundBrush() | 设置场景的背景画刷 | |
void setForegroundBrush() | 设置场景的前景画刷 | |
场景 | void update() | 刷新场景显示内容 |
分组 | QGraphicsItemGroup* createItemGroup() | 创建图形项组 |
void destroyItemGroup() | 解除一个图形项组 | |
QGraphicsItem* focusItem() | 返回当前获得焦点的图形项 | |
输入焦点 | void clearFocus() | 清除选择的焦点 |
bool hasFocus() | 场景是否有焦点 | |
void addItem() | 添加或移动一个图形项到场景里 | |
void removeItem() | 删除一个图形项 | |
void clear() | 清除场景中的所有图形项 | |
QGraphicsItem* mouseGrabberItem() | 返回用鼠标抓取的图形项 | |
QList<QGraphicsItem *> selectedItems() | 返回选择的图形项列表 | |
void clearSelection() | 清除所有选择 | |
图形项操作 | QGraphicsItem * itemAt() | 获取某个位置的顶层图形项 |
QList<QGraphicsItem *> items() | 返回某个矩形区域、多边形等选择区域内的图形项列表 | |
QGraphicsEllipseItem * addEllipse() QGraphicsLineItem * addLine() QGraphicsPathItem * addPath() QGraphicsPixmapItem * addPixmap() QGraphicsPolygonItem * addPolygon() QGraphicsRectItem * addRect() QGraphicsSimpleTextItem * addSimpleText() QGraphicsTextItem * addText() | 创建并添加一个椭圆到场景里 创建并添加一条直线到场景里 创建并添加一条绘图路径( QPainterPath 对象)到场景里 创建并添加一个 pixmap 图片到场景里 创建并添加一个多边形到场景里 创建并添加一个矩形到场景里 创建并添加一个 QGraphicsSimpleTextItem 对象到场景里 创建并添加一个字符串到场景里 | |
添加图形项 | QGraphicsProxyWidget * addWidget() | 创建并添加一个 QGraphicsProxyWidget 对象到场景里 |
视图事件、方法-QGraphicsView类
设置场景 | void setScene() | 设置关联显示的场景 |
void setSceneRect() | 设置场景在视图中可视部分的矩形区域 | |
外观 | void setAlignment() | 设置场景在视图中的对齐方式,默认是上下都居中 |
void setBackgroundBrush() | 设置关联场景的背景画刷 | |
void setForegroundBrush() | 设置关联场景的前景画刷 | |
void setRenderHints() | 设置视图的绘图选项 | |
void setInteractive() QRect rubberBandRect() void setRubberBandSelectionMode() QGraphicsItem* itemAt() | 设置是否允许场景交互,若禁止交互,则任何键盘或鼠标操作都被忽略 返回选择的矩形框 选择模式,参数为枚举类型 Qt::ItemSelectionMode 获取视图坐标系中某个位置的图形项 | |
交互 | QList<QGraphicsItem*> items() | 获取场景中的所有图形项或者某个选择区域内图形项的列表 |
void centerOn() | 移动视口中的内容,使得场景中的某个坐标点位于视图的中央 | |
场景显示 | void ensureVisible() | 移动视口中的内容,确保场景中的某个矩形区域可见 |
void fitInView() | 视图缩放并移动卷滚条,确保场景中的某个矩形区域显示在视口中 | |
void translate() | 视图坐标系平移 | |
void scale() | 视图坐标系缩放 | |
void rotate() | 视图坐标系旋转 | |
坐标变换 | void shear() | 视图坐标系扭转 |
QPoint mapFromScene() | 将场景中的一个坐标映射为视图中的坐标 | |
坐标映射 | QPointF mapToScene() | 将视图中的一个坐标映射为场景中的坐标 |