Qt 中boundingRect的作用是什么?

Oskar_Sun 2015-01-07 08:57:14
1.之前的理解是如果使用paint函数在自定义图形项中画图则只能在boundingRect返回的矩形范围中画图,但实际上paint函数中的图形可以比boundingRect返回的图形大,编译也可以通过,那么boundingRect的意义是什么?为什么要恰好包住我所要画的图形?
2.boundingRect的返回值大小如何在程序运行中随着我的矩形Item大小变化而变化?
...全文
3630 8 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
Oskar_Sun 2015-01-08
  • 打赏
  • 举报
回复
引用 7 楼 openXMPP 的回复:
boundingRect我觉得你可以这么理解 这个就是你的widget和Qt框架之间的约定 也就是说你的这个widget在这个Rect内发生了update或变化 会触发Qt对这部分进行绘制 像Qt这样的 都是按需重绘区域的
嗯,略微理解了,感谢回答。
dbzhang800 2015-01-07
  • 打赏
  • 举报
回复
引用 4 楼 qq_16982701 的回复:
试过的,重载了了MouseMoveEvent函数,item就没法拖动了,应该是鼠标移动时候自动调用了event函数,item就没法动了
这说明你 override 的mouseMoveEvent() 中写的代码有问题。 注意:override 不叫重载(overload)
乔巴好萌 2015-01-07
  • 打赏
  • 举报
回复
boundingRect我觉得你可以这么理解 这个就是你的widget和Qt框架之间的约定 也就是说你的这个widget在这个Rect内发生了update或变化 会触发Qt对这部分进行绘制 像Qt这样的 都是按需重绘区域的
Oskar_Sun 2015-01-07
  • 打赏
  • 举报
回复
引用 3 楼 foruok 的回复:
[quote=引用 2 楼 qq_16982701 的回复:] [quote=引用 1 楼 foruok 的回复:] boundingRect说君子协定,你告诉 QGraphicsScene 你的 Item 这么大。scene会根据它来检测 item 之间的碰撞、重叠等。所谓君子协定,并没有强制你必须在这个 boundingRect 内绘制,你画在外面, scene 也不管你啊,除非指定了特殊标记。 要在绘制过程中动态改变 boundingRect ,自己计算大小,在 boundingRect 方法中返回即可。 博客之星,投foruok一票
了解了,多谢。 还有个问题,图形视图框架中的QMouseMoveEvent是不是跟setItemMoveable会有冲突?[/quote] 我不记得有冲突啊,你可以试试。[/quote] 试过的,重载了了MouseMoveEvent函数,item就没法拖动了,应该是鼠标移动时候自动调用了event函数,item就没法动了
foruok 2015-01-07
  • 打赏
  • 举报
回复 1
引用 2 楼 qq_16982701 的回复:
[quote=引用 1 楼 foruok 的回复:] boundingRect说君子协定,你告诉 QGraphicsScene 你的 Item 这么大。scene会根据它来检测 item 之间的碰撞、重叠等。所谓君子协定,并没有强制你必须在这个 boundingRect 内绘制,你画在外面, scene 也不管你啊,除非指定了特殊标记。 要在绘制过程中动态改变 boundingRect ,自己计算大小,在 boundingRect 方法中返回即可。 博客之星,投foruok一票
了解了,多谢。 还有个问题,图形视图框架中的QMouseMoveEvent是不是跟setItemMoveable会有冲突?[/quote] 我不记得有冲突啊,你可以试试。
Oskar_Sun 2015-01-07
  • 打赏
  • 举报
回复
引用 1 楼 foruok 的回复:
boundingRect说君子协定,你告诉 QGraphicsScene 你的 Item 这么大。scene会根据它来检测 item 之间的碰撞、重叠等。所谓君子协定,并没有强制你必须在这个 boundingRect 内绘制,你画在外面, scene 也不管你啊,除非指定了特殊标记。 要在绘制过程中动态改变 boundingRect ,自己计算大小,在 boundingRect 方法中返回即可。 博客之星,投foruok一票
了解了,多谢。 还有个问题,图形视图框架中的QMouseMoveEvent是不是跟setItemMoveable会有冲突?
foruok 2015-01-07
  • 打赏
  • 举报
回复
boundingRect说君子协定,你告诉 QGraphicsScene 你的 Item 这么大。scene会根据它来检测 item 之间的碰撞、重叠等。所谓君子协定,并没有强制你必须在这个 boundingRect 内绘制,你画在外面, scene 也不管你啊,除非指定了特殊标记。

要在绘制过程中动态改变 boundingRect ,自己计算大小,在 boundingRect 方法中返回即可。

博客之星,投foruok一票
Oskar_Sun 2015-01-07
  • 打赏
  • 举报
回复
引用 5 楼 dbzhang800 的回复:
[quote=引用 4 楼 qq_16982701 的回复:] 试过的,重载了了MouseMoveEvent函数,item就没法拖动了,应该是鼠标移动时候自动调用了event函数,item就没法动了
这说明你 override 的mouseMoveEvent() 中写的代码有问题。 注意:override 不叫重载(overload)[/quote] 哦,重新实现对吧? 我mouseMoveEvent里面是空函数。没有mouseMoveEvent直接设置ItemIsMoveable就可以拖动item,添加了函数就不能拖动了。

16,819

社区成员

发帖
与我相关
我的任务
社区描述
Qt 是一个跨平台应用程序框架。通过使用 Qt,您可以一次性开发应用程序和用户界面,然后将其部署到多个桌面和嵌入式操作系统,而无需重复编写源代码。
社区管理员
  • Qt
  • 亭台六七座
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧