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

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/15543.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Golang内存分配及垃圾回收

为什么需要垃圾回收? 自动释放不需要的对象,让出存储器资源,无需程序员手动执行 Go V1.3之前是标记-清除算法 具体步骤 缺点:程序卡顿、扫描整个heap、数据清除会产生heap碎片 V1.3之后,做了简单的优化 V1.5之后&a…

MySQL索引、事务、与存储引擎

MySQL索引、事务、与存储引擎 一、索引 1.概念 索引是一个排序的列表,包含索引字段的值和其相对应的行数据所在的物理地址2.作用 优点 加快表的查询速度 可以对字段排序缺点 额外占用磁盘空间 更新包含索引的表效率会更慢3.索引工作模式 没有索引的情况下&am…

-1在内存中的存储及打印问题。

首先先看看代码: #include"stdio.h" int main() { char a -1; signed char b -1; unsigned char c -1; printf("a%d b%d c%d", a, b, c); return 0; } 代码很简单,问打印结果是什么? 下面我…

一文了解Python字符串格式化、input语句

目录 🥩1.1.字符串拼接 🥩1.2.对字符串格式化 🥩1.3.字符串精度 🥩1.4.快速格式化 🥩1.5.对表达式格式化 🥩1.6.黑马小练习 🥩2.1.input语句 🦐博客主页:大虾好吃吗的博客…

【前端知识】React 基础巩固(十八)——组件化开发(二)

React 基础巩固(十八)——组件化开发(二) 生命周期 生命周期是一个抽象的概念,在生命周期的整个过程中,分成了很多个阶段 比如装载阶段(Mount),组件第一次在 DOM 树中被渲染的过程比如更新过程…

【python】逻辑中断(and or)

今天学习javascript的时候竟然有一个额外收获:逻辑中断。而且我实验了一下,逻辑中断同样适用于python。 0 and 2返回: 0 1 and 2返回: 2 0 and 2返回的是0,而1 and 2返回的是2。就是因为在0那里出现了逻辑中断。 解…

大模型的数据瓶颈应该如何破除?看完这篇文章你就懂了

随着机器学习和深度学习技术的不断发展,大模型已经成为了现代人工智能研究和应用中的重要组成部分。然而,对于大模型而言,数据瓶颈问题仍然是一个亟待解决的挑战。尤其是在数据存量和质量方面,我们需要更加注重其影响,…

【Gradle】Gradle的概述与简单使用

一、概述 1.什么是Gradle? Gradle 是一种构建工具。 Java世界中主要有三大构建工具:Ant、Maven和Gradle。Ant几乎销声匿迹了,常见的就只有Maven和Gradle。 目前市面上Java开发,使用的构建工具基本都是Maven;安卓开…

C语言程序设计——数据在内存中的存储

一、数据类型介绍 1.基本内置类型 char // 字符数据类型 1 B short // 短整型 2 B int // 整型 4 B long // 长整型 4 or 8 B long long //更长的整型 8 B float //单精度浮点型 4 B double //双精…

解决Unity的PostProcess奇怪报错

大家好,我是阿赵。   最近在使用Unity的PostProcess后处理效果的时候,发现了一个问题,下面记录一下这个问题的出现原因和解决办法。 一、出现问题 问题是这样出现的:   在场景里面添加某一个后处理效果后,当这个后…

C# PaddleInference OCR文字识别(只识别)

说明 C# PaddleInference OCR文字识别(只识别),没有文字区域检测、文字方向判断 测试图片是文字区域检测裁剪出来、处理过的图片 完整的OCR识别查看 C# PaddleInference OCR识别 学习研究Demo_天天代码码天天的博客-CSDN博客 效果 项目 …

idea集成maven-mvnd

maven-mvnd是什么? 参考文档: Maven加强版 — mvnd的使用测试 - 知乎https://blog.csdn.net/cr898839618/article/details/122319874 1.下载mvnd安装包 Releases apache/maven-mvnd GitHub 2.修改配置文件:安装包中的conf目录下的mvnd.…