请选择 进入手机版 | 继续访问电脑版
MSIPO技术圈 首页 IT技术 查看内容

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

2023-07-13

前面也讲到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很小的时候,往往是看不清楚,展现效果也很差(显示效果差,也可以解释下,但编辑的时候还是那么小,肯定体验很差),因此因此很难处理

 

相关阅读

热门文章

    手机版|MSIPO技术圈 皖ICP备19022944号-2

    Copyright © 2024, msipo.com

    返回顶部