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

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鼠标可以拖出一个矩形区域并且会使得场景自动选择这个矩形区域内的图元

http://www.xdnf.cn/news/147.html

相关文章:

  • 人脸扫描黑科技:多相机人脸扫描设备,打造你的专属数字分身
  • 学术AI工具推荐
  • 基于WebRTC技术的EasyRTC:支持任意平台设备的实时音视频通信解决方案
  • 科技天眼守望农田:珈和卫星遥感监测赋能智慧农业,护航粮食安全新未来
  • 替代升级VMware | 云轴科技ZStack构建山西证券一云多芯云平台
  • python有序列表
  • Excel提取图片并自动上传到文件服务器(OOS),获取文件链接
  • Docker用model.config部署及更新多个模型
  • 【基础知识补充】标准库类型:string和vector
  • JDBC 与 MyBatis 详解:从基础到实践
  • 07_Docker 资源限制
  • 软件研发技术团队管理规范
  • 安卓手机如何改ip地址教程
  • ETL数据集成平台在交通运输行业的五大应用场景
  • 旅游资源网站登录(jsp+ssm+mysql5.x)
  • LeetCode 259 题全解析:Swift 快速找出“满足条件”的三人组
  • RocketMQ 的详细使用教程
  • 【多目标进化算法】NSGA-II 算法(结合例子)
  • 【C++】 —— 笔试刷题day_19
  • Web3架构下的数据隐私与保护
  • 【数据结构_10】二叉树(2)
  • HarmonyOS:1.4 - HarmonyOS应用程序框架基础
  • Python(21)Python日期时间完全指南:从基础到实战注意事项
  • QT 文件和文件夹操作
  • 基于SpringBoot成绩管理系统设计与实现(源码+文档+部署讲解)
  • SAP系统中MD01与MD02区别
  • 如何使用Python进行自动化的系统管理?
  • 《软件设计师》复习笔记(14.2)——统一建模语言UML、事务关系图
  • TCL 亮相北京 InfoComm China 2025,引领商显智能化变革浪潮
  • AI数据分析与BI可视化结合:解锁企业决策新境界