【Qt 图形视图框架】QGraphics分析及使用

80 篇文章 2 订阅
67 篇文章 1 订阅
本文介绍了Qt图形视图框架的构成,包括场景的抽象管理、视图的绘图功能和图形项的基本概念。详细讲解了坐标系统以及如何创建和使用自定义图形项。
摘要由CSDN通过智能技术生成

组成

Qt 图形视图框架分为三部分:场景、视图、图元。
在这里插入图片描述

场景对于程序来说,场景是不可见的,是一个抽象的管理图形项的容器。 可以向场景中添加图形项,比如:圆形、矩形、三角形等等
此外,还可以获取场景中的某个图形项

视图提供绘图的视图组件,用于显示场景中的内容。 需要注意两点
第一点:视图大于场景
场景在视图的中间部分显示,也可以设置视图的Alignment属性控制场景在视图中的显示位置
第二点:视图小于场景
视图只能显示场景的一部分内容,但是会自动提供滚动条在整个场景内移动

图形项一些基本的图形元件,例如:椭圆、矩形等等
基类是:QGraphicsItem
对于这些基本的图形项也有现成的图形类
QGraphicsItem被这些类继承
在这里插入图片描述

坐标

在这里插入图片描述

场景坐标
等价于QPainter的逻辑坐标,一般以场景的中心为原点,单位是像素。 场景是所有图形项的基础坐标,描述了每个顶层图形项的位置。

视图坐标
与设备坐标相同,是物理坐标,一般以左上角为圆点,单位是像素。
视图的坐标只与widget或者视口有关,而与场景无关,所有的鼠标事件、拖放事件的坐标首先是由视图坐标定义的,然后用户需要将这些坐标映射成场景坐标,以便程序中交互

图元坐标
局部逻辑坐标,一般以图件的中心为原点
每个图形项在场景里都有一个位置坐标,是由QGraphicsItem::scenePos给出的。

使用

 // 创建场景对象
QGraphicsScene scene;
scene.addText("Hello, world!");
// 创建视图对象
QGraphicsView view(&scene);
// 显示
view.show();

下面是自定义item的绘制及显示范围

  class SimpleItem : public QGraphicsItem
{
public:
    QRectF boundingRect() const
    {
        qreal penWidth = 1;
        return QRectF(-10 - penWidth / 2, -10 - penWidth / 2,
                      20 + penWidth, 20 + penWidth);
    }

    void paint(QPainter *painter, const QStyleOptionGraphicsItem *option,
               QWidget *widget)
    {
        painter->drawRoundedRect(-10, -10, 20, 20, 5, 5);
    }
};

至此,认识结束,此后,记录跟多的使用,包括视图、图元的移动、缩放、复制、粘贴、导出等。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

FreeLikeTheWind.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值