Bounding Rect 和 Shape 的联系与区别

Bounding Rect

将 item 的外边界定义为矩形,所有绘制必须限制在此区域内,QGraphicsView 使用它来确定 item 是否需要重绘。
虽然 item 的形状可以是任意的(例如:直线、椭圆、矩形 ),但是 bounding rect 总是矩形,并且不受 item 变换的影响。

shape

以本地坐标中的 QPainterPath 形式返回 item 的形状。形状可用于许多事情,包括:碰撞检测,命中测试以及 QGraphicsScene::items() 函数。
shape() 默认实现调用 boundingRect() 返回一个简单的矩形形状,但子类可以重新实现该函数,以返回非矩形 item 更准确的形状。例如,一个圆形 item 可以选择返回椭圆形状,以便更好地进行碰撞检测。
shape() 由 contains() 和 collidesWithPath() 的默认实现调用。

三角形绘图定义

其中mBoundingRect为三角形的包围盒

 QRectF rect = mBoundingRect;QPointF triangle[3]={QPointF(rect.topLeft().x(),rect.topLeft().y()),QPointF(rect.bottomLeft().x(),rect.bottomLeft().y()),QPointF(rect.bottomRight().x(),rect.bottomRight().y())};painter->drawPolygon(triangle,3);

三角形的显示如下:其中右上半部分虽然看不见,但是进行碰撞检测时候却是利用整个矩形,而不是显示的三角形,而且当我们点击右上角空白部分时候,也会选中整个蓝色三角形。如何改变这种情况? 可以通过定义shape来实现。

三角形边界定义

QPainterPath TriangleItem::shape() const
{QPainterPath path;QRectF rect = mBoundingRect;QPolygonF rect_triangle;rect_triangle << QPointF(rect.topLeft().x(),rect.topLeft().y()) << QPointF(rect.bottomLeft().x(),rect.bottomLeft().y()) << QPointF(rect.bottomRight().x(),rect.bottomRight().y()) << QPointF(rect.center().x(), rect.center().y());path.addPolygon(rect_triangle);return path;
}

通过如上定义,我们相当于将三角形斜边上的中点作为第四个顶点,如下图所示。通过这样的定义便可以实现三角形自定义的边界(包围盒)。

Qt中如何改变三角形图形项的包围盒相关推荐

  1. QT中使用OpenGL绘制图形

    Qt Creator中的3D绘图及动画教程(参照NeHe) 刚刚学习了Qt Creator,发现Qt提供了QtOpenGL模块,对OpenGL做了不错的封装,这使得我们可以很轻松地在Qt程序中使用Op ...

  2. 在qt中使用opengl绘制图形动画

    可以使用Qt OpenGL模块的功能实现图形的绘制,实现3d动画效果,以下例子介绍如何使用Qt OpenGL相关功能. 1. 2D图像绘制:该示例使用QPainter和QGLWidget展示一个动态的 ...

  3. Qt中的QWidget

    文章目录 1 窗口组件 2 QWidget类 3 窗口类型 4 窗口部件的大小设置 5 QWidget常用方法 1 窗口组件 Qt中的窗口组件: 图形用户界面由不同的窗口和窗口组件构成. <Qt ...

  4. qt获取当前场景中的所有图形项的层次

    提要 场景中有多个窗口,窗口处于不断更新中,获取场景中当前所有窗口的图层.由于特定的结构,这里场景中的窗口采用自定义窗口,将该自定义窗口作为自定义代理窗口的窗口,图形项作为自定义代理窗口的父窗口,再将 ...

  5. Qt场景中图形项的删除

    场景中图形项删除的时候调用系统函数removeItem()删除该图形项,但还需将图形项delete掉,并置为空,主要代码如下: void chunzhongForm::deleteItem(QGrap ...

  6. Qt图形视图框架:将自定义图形项放入布局

    只有继承布局项QGraphicsLayoutItem的对象才能放入布局.继承QGraphicsLayoutItem后需要重写setGeometry().sizeHint()这两个函数. 以自定义滑动条 ...

  7. Qt中的基础图形绘制

    文章目录 1 Qt中的基础图形绘制 2 Qt基础图形绘制中的视口和窗口 3 综合实例开发:简易绘图程序 3.1 需求分析 3.2 设计分析 1 Qt中的基础图形绘制 Qt图形系统中的关键角色: QPa ...

  8. QT使用html改变字体颜色,QT中设置字体和更改字体颜色

    QT中设置字体和更改字体颜色 对一个文本框lineEdit设置字体,首先我建了一个按钮setFontButton用来设置 并定义了它的相应函数setFont,将setFontButton添加到布局中, ...

  9. qt创建图形项,添加自定义窗口

    创建场景,视图和图形项之后,在图形项中添加自定义窗口.主要代码如下: scene = new QGraphicsScene(0,0,1855,578,ui->insideWidget);//在开 ...

最新文章

  1. 获取本年、本月、本周时间范围_为什么“增值税期末留抵税额本年累计数”很快就被废止了...
  2. 操作系统选择成固定模式 HTML5是潜在方向
  3. 搭建cocos2d-x-android环境 Windows XP3 + Eclipse + NDKR7+COCOS2DX(没有用到cygwin和minigw)
  4. 《Python入门到精通》文件操作
  5. java File_encoding属性
  6. 离散数学 | ∅ 与 {∅} 出现在离散数学幂集合中
  7. 2022大众点评商家数据
  8. 国产操作系统中标麒麟v6
  9. Python的Numpy库下载及安装
  10. 网易秋招编程题——优雅的点
  11. linux退出热键_linux用户退出登录的命令介绍
  12. 任务管理器已被管理员禁用win10
  13. Visual Leak Detector VS2019
  14. Labview2018视频教程(共51节)
  15. 关于爱情和婚姻的经典故事
  16. 一文搞懂蓝绿部署和金丝雀发布
  17. 将正确的ADC与应用程序匹配
  18. 大数据和商务智能(BI)的区别
  19. 约翰-聂夫的投资原则
  20. 思维导图---“计算机硬件系统”练手

热门文章

  1. Ubuntu NFS 服务器和客户端挂载详解
  2. 2022-2028年中国非溶聚丁苯橡胶行业市场竞争态势及发展前景分析报告
  3. SpringSecurity安全验证中文乱码问题
  4. 用NumPy genfromtxt导入数据
  5. MinkowskiEngine基准测试
  6. ADAS摄像头图像环视拼接算法
  7. python 2x list 里面的中文打印效果为unicode 编码 的处理方法
  8. Windows 系统下使用grep 命令
  9. RxJava 实现模糊搜索
  10. android studio so文件的添加