当前位置: 首页 > news >正文

Qt官方案例知识点总结(图形视图——Colliding Mice)

Colliding Mice 案例 

图元可重写下面的方法,返回一个QPainterPath(形状),该形状基于图形项自己的坐标系

返回的形状用于碰撞检测、命中测试等,形状越精确,那么碰撞检测等就越准确

不重写的话,默认取 boundingRect()方法返回的矩形

[virtual] QPainterPath QGraphicsItem::shape() const

比如下面返回1个椭圆:

QPainterPath Mouse::shape() const
{QPainterPath path;path.addEllipse(-10, -20, 20, 40);return path;
}

---------------------------------------------------------------------------------------------------------------------------------

场景有下面的一个槽函数advance()这个槽函数在调用时,会调用场景里面所有图元的advance()方法,通常搭配QTimer,或者QTimeLine,来重复调用advance方法,从而实现简单的动画

[slot] void QGraphicsScene::advance()

图元可重写下面的方法,(比如在里面改变位置,每次设置不同的位置,这样图元就动起来了)

[virtual] void QGraphicsItem::advance(int phase)

固定的写法是:(phase参数不必太在意)

void advance(int phase)  override
{//参数phase在场景第一阶段调用时,会传0,为0直接returnif (!phase)return;//改变位置,大小,}

--------------------------------------------------------------------------------------------------------------------------------

下面的方法用来设置场景给item应用索引的方式

用来加快 items() 和itemAt()等图元查找函数

 void QGraphicsScene::setItemIndexMethod(QGraphicsScene::ItemIndexMethod method)

method有两种

  • QGraphicsScene::BspTreeIndex查找图元快,是对数时间,但是移动,添加,删除图元是对数时间,适合静态场景,即大多数图元不会移动
  • QGraphicsScene::NoIndex查找图元是线性时间,会遍历所有图元,图元越多越慢,但是移动、添加、删除图元是常量时间,适合动态场景,即许多图元会被不断地添加、移动和删除。

--------------------------------------------------------------------------------------------------------------------------------

下面的函数用来给视图设置缓存模式

 void QGraphicsView::setCacheMode(QGraphicsView::CacheMode mode)
  • QGraphicsView::CacheNone默认的缓存模式,视图不会缓存任何内容,每次重绘时,视图会重绘整个场景,适合场景内容会频繁变化
  • QGraphicsView::CacheBackground:视图会对场景的背景进行缓存,当时视图需要重绘时,会优先使用缓存的背景,只有在背景发生变化时才重新绘制背景适合场景背景复杂(比如带透明度的)但不经常变化时,该模式可以提高重绘性能,比如一个地图应用程序,地图的背景图层通常是固定的,只有一些动态的元素(比如车辆,标记)会发生变化

--------------------------------------------------------------------------------------------------------------------------------

下面的函数用来设置视图视口的更新模式,控制图形场景的渲染区域和优化性能不同的模式会影响 Qt 如何检测和更新需要重绘的区域,适用于不同场景下的性能优化和渲染需求。

void QGraphicsView::setViewportUpdateMode(QGraphicsView::ViewportUpdateMode mode)

 

 --------------------------------------------------------------------------------------------------------------------------------

 确定鼠标在视图上点击后再滑动的行为

 void QGraphicsView::setDragMode(QGraphicsView::DragMode mode)
  • QGraphicsView::NoDrag没有任何行为,可以自己重写鼠标事件自定义行为
  • QGraphicsView::ScrollHandDrag鼠标可以滚动视图的内容,如果场景大于视图
  • QGraphicsView::RubberBandDrag鼠标可以拖出一个矩形区域并且会使得场景自动选择这个矩形区域内的图元

相关文章:

  • 极狐GitLab 账号限制有哪些?
  • 从数字化到智能化,百度 SRE 数智免疫系统的演进和实践
  • 第 5 期(进阶版):训练第一个 DDPM 模型(使用 CIFAR-10 数据集)
  • Kafka 时间轮
  • 杭州小红书代运营公司-品融电商:全域增长策略的实践者
  • U盘实现——双盘符实现
  • AI当前状态:有哪些新技术
  • 深入理解分布式缓存 以及Redis 实现缓存更新通知方案
  • Leetcode 2158. 每天绘制新区域的数量【Plus题】
  • 复现SCI图像增强(Toward fast, flexible, and robust low-light image enhancement.)
  • 高安全低功耗MCU:机器人控制系统的智能化与可靠性提升
  • Kubernetes》》k8s》》Namespace
  • 评测 Doubao-1.5-thinking-pro | 豆包·深度思考模型
  • 工程化实践:Flutter项目结构与规范
  • LeetCode 443 压缩字符串
  • 工厂方法模式详解及c++代码实现(以自动驾驶感知模块中的应用为例)
  • 【第48节】探究汇编使用特性:从基础到混合编程
  • 合成数据中的对抗样本生成与应用:让AI模型更强、更稳、更安全
  • 算法驱动光场革命:SLM技术引领智能光学新时代
  • 【面经】杭州产链数字科技一面
  • 2024“好评中国”网络评论大赛结果揭晓
  • IMF前副总裁朱民捐赠1000万元,在复旦设立青云学子基金
  • 中国空间站首批在轨繁育果蝇即将返回地球,有望获得多项科学成果
  • 发出“美利坚名存实亡”呼号的卡尼,将带领加拿大走向何方?
  • 国家发改委下达今年第二批810亿超长期特别国债资金,支持消费品以旧换新
  • 美国“杜鲁门”号航母一战机坠海