Qt画图框架,实现自己的画图框架

前面也讲到Qt提供画图框架,经典MVC模型,也没有什么问题。但Qt仅提供框架性东西,很难落地,很难应用在实际项目当中,一般需要自己捋一遍,这样才能理解好

什么view,canvas都好理解,只要控制好职责范围,就能很好编写这两个派生类的代码,对应用而言,关键是Item的实现,理论上Item才是五彩斑斓的世界。

总体架构如下:

说人话版本:

变化最多的,也是Item

有几件事情,是要重新写的:

QRectF boundingRect() const

这个用于判断是否落在本区域,本区域范围由你自己定义,这里是返回QRect,也就是也还比较麻烦,比如我们希望不是落在Item的方形区域,实际需要希望落在Item的边缘(线条附近),但边缘不可能是Rect的

void paint(QPainter *painter,
               const QStyleOptionGraphicsItem *option,
               QWidget *)

paint就是你要画的图形,最终展现出来的图形

这个比较麻烦的地方,是View的压缩比例改变之后,要如何展现的问题。还有就是要区分:鼠标滑过、正在编辑、选中状态、正在调整等几种状态如何展现的问题,还是比较麻烦

int type() const;

类型,这个仅仅是类型,根据不同类型处理是否可获得焦点、调整大小之类的

实际应该还有形状区分,往往要自己。同样的可移动,也有很多形状需要区分

 对于所有的item,至少是存在如下几个属性:

1、大小(或线条粗细)

2、颜色

而大小,是很讨厌的,因为View存在很多种Scale的,最简单Scale=1,实际只要放开滚轮,这个值就很讨厌。

paint是指Scale的大小,在Scale很小的时候,往往是看不清楚,展现效果也很差(显示效果差,也可以解释下,但编辑的时候还是那么小,肯定体验很差),因此因此很难处理

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值