自定义图形项时怎么使用QGraphicsItem::shape()函数

玩pass 2018-10-26 04:16:43
最近开发中遇到了问题:
继承QGraphicsItem,自定义图形项,重写了paint和boundingRect,因为图形项是不规则的,所以希望能够返回图元的大概形状,而不只是矩形框。参考了帮助文档重写shape(),返回的区域还是boundingRect的矩形框。网上查了很多资料,都和帮助文档一样,希望哪位朋友不吝赐教
...全文
2622 13 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
Being-- 2020-04-22
  • 打赏
  • 举报
回复
哦,输错了,是正数
Being-- 2020-04-22
  • 打赏
  • 举报
回复
需要确定你的boundingRect()返回是否为Valid,即宽高都为整数,QRect里面有Valid函数。
  • 打赏
  • 举报
回复
引用 9 楼 qq_35335034 的回复:
无效,打断点也没用,只会到boundingRect()里面。
你用qdebug输出,不要打断点 然后你拖拽item,让scene触发shape调用 看输出什么信息
玩pass 2018-11-01
  • 打赏
  • 举报
回复
无效,打断点也没用,只会到boundingRect()里面。
  • 打赏
  • 举报
回复
你把path用qdebug输出一下。如果这个对象无效的话,的确会回退调用boundingrect
玩pass 2018-11-01
  • 打赏
  • 举报
回复
引用 10 楼 南京短暂的春天的回复:
[quote=引用 9 楼 qq_35335034 的回复:] 无效,打断点也没用,只会到boundingRect()里面。
你用qdebug输出,不要打断点 然后你拖拽item,让scene触发shape调用 看输出什么信息[/quote] 他就是怎么都不调用shape函数,就调用bounding
玩pass 2018-10-31
  • 打赏
  • 举报
回复
  • 打赏
  • 举报
回复
把你的代码贴出来。除非你的函数名写错了,不然肯定能行。
玩pass 2018-10-31
  • 打赏
  • 举报
回复 1
我发现问题是:场景的鼠标点击事件默认调用图元的boundingRect()函数,而不调用我重写的shape()函数。
各位有遇到这样的情况吗?
  • 打赏
  • 举报
回复

QPainterPath shape() const;
我估计你是这个const丢了,导致函数重写失败
bhes74930321 2018-10-29
  • 打赏
  • 举报
回复
QPainterPath ConnectLine::shape() const
{
QPainterPathStroker stroker;
stroker.setWidth(6);
return stroker.createStroke(path);
}
玩pass 2018-10-26
  • 打赏
  • 举报
回复
谢谢你回我的帖子。
我已经重写了,类似如下简单重写shape()函数:
QPainterPath path;
path.addEllipse(boundingRect());
return path;

然后我在paint()函数里面将这块区域画了出来:
painter->drawPath(shape());
显示的还是矩形边界,不是椭圆。
之后也写了其他代码,返回不规则区域,但最后用paint显示出来的还是矩形区域。

难道不是这么用的吗,还是我哪一步做错了。但是QT的帮助文档里面的例子也是我上面写的代码,所以现在就是不知道怎么办。
网上找资料,都是说重写shape()返回图元的准确形状,用于接收事件、碰撞检测等等。。。。
决战小树林 2018-10-26
  • 打赏
  • 举报
回复
重写shape() 计算你的不规则区域 然后返回一个path即可

16,818

社区成员

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

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