Qt中如何改变三角形图形项的包围盒
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中如何改变三角形图形项的包围盒相关推荐
- QT中使用OpenGL绘制图形
Qt Creator中的3D绘图及动画教程(参照NeHe) 刚刚学习了Qt Creator,发现Qt提供了QtOpenGL模块,对OpenGL做了不错的封装,这使得我们可以很轻松地在Qt程序中使用Op ...
- 在qt中使用opengl绘制图形动画
可以使用Qt OpenGL模块的功能实现图形的绘制,实现3d动画效果,以下例子介绍如何使用Qt OpenGL相关功能. 1. 2D图像绘制:该示例使用QPainter和QGLWidget展示一个动态的 ...
- Qt中的QWidget
文章目录 1 窗口组件 2 QWidget类 3 窗口类型 4 窗口部件的大小设置 5 QWidget常用方法 1 窗口组件 Qt中的窗口组件: 图形用户界面由不同的窗口和窗口组件构成. <Qt ...
- qt获取当前场景中的所有图形项的层次
提要 场景中有多个窗口,窗口处于不断更新中,获取场景中当前所有窗口的图层.由于特定的结构,这里场景中的窗口采用自定义窗口,将该自定义窗口作为自定义代理窗口的窗口,图形项作为自定义代理窗口的父窗口,再将 ...
- Qt场景中图形项的删除
场景中图形项删除的时候调用系统函数removeItem()删除该图形项,但还需将图形项delete掉,并置为空,主要代码如下: void chunzhongForm::deleteItem(QGrap ...
- Qt图形视图框架:将自定义图形项放入布局
只有继承布局项QGraphicsLayoutItem的对象才能放入布局.继承QGraphicsLayoutItem后需要重写setGeometry().sizeHint()这两个函数. 以自定义滑动条 ...
- Qt中的基础图形绘制
文章目录 1 Qt中的基础图形绘制 2 Qt基础图形绘制中的视口和窗口 3 综合实例开发:简易绘图程序 3.1 需求分析 3.2 设计分析 1 Qt中的基础图形绘制 Qt图形系统中的关键角色: QPa ...
- QT使用html改变字体颜色,QT中设置字体和更改字体颜色
QT中设置字体和更改字体颜色 对一个文本框lineEdit设置字体,首先我建了一个按钮setFontButton用来设置 并定义了它的相应函数setFont,将setFontButton添加到布局中, ...
- qt创建图形项,添加自定义窗口
创建场景,视图和图形项之后,在图形项中添加自定义窗口.主要代码如下: scene = new QGraphicsScene(0,0,1855,578,ui->insideWidget);//在开 ...
最新文章
- 获取本年、本月、本周时间范围_为什么“增值税期末留抵税额本年累计数”很快就被废止了...
- 操作系统选择成固定模式 HTML5是潜在方向
- 搭建cocos2d-x-android环境 Windows XP3 + Eclipse + NDKR7+COCOS2DX(没有用到cygwin和minigw)
- 《Python入门到精通》文件操作
- java File_encoding属性
- 离散数学 | ∅ 与 {∅} 出现在离散数学幂集合中
- 2022大众点评商家数据
- 国产操作系统中标麒麟v6
- Python的Numpy库下载及安装
- 网易秋招编程题——优雅的点
- linux退出热键_linux用户退出登录的命令介绍
- 任务管理器已被管理员禁用win10
- Visual Leak Detector VS2019
- Labview2018视频教程(共51节)
- 关于爱情和婚姻的经典故事
- 一文搞懂蓝绿部署和金丝雀发布
- 将正确的ADC与应用程序匹配
- 大数据和商务智能(BI)的区别
- 约翰-聂夫的投资原则
- 思维导图---“计算机硬件系统”练手