QGraphcisItem构造不规则图形的处理

binbin_123456 2010-09-03 02:19:39
用QGraphicsItem实现规则的长方形对象是很方便的,但是如果要实现不规则的对象,例如三角形、圆形等,就不太好实现了。目前我知道的是整个对象响应的区域是boundingRect()返回的矩形区域,有时候我们需要只响应不规则的区域(例如鼠标点击只响应三角形内的区域等),那这个时候需要怎么去过滤多余的区域呢,哪位朋友熟悉这一块的,谢谢指出!





个人联系方式han.xb@hotmail.com,欢迎加为好友
...全文
412 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
ailinty 2010-09-09
  • 打赏
  • 举报
回复
解决了把答案贴出来分享下。
chinese_zmm 2010-09-09
  • 打赏
  • 举报
回复
个人感觉你说的这个功能做好分开来做,显示归显示,响应归响应,因为显示的是一个矩形,所以必须要通过一个矩形区域来显示,而响应的部分,一个可以自己在mousePress里面判断,或者再添加一个子的不规则item,专门用来响应事件。
ljdtq 2010-09-08
  • 打赏
  • 举报
回复
难道类似欲vc的控件重绘?
binbin_123456 2010-09-03
  • 打赏
  • 举报
回复
非常感谢你的回答,但还是跟我的目标有很大的偏差,我的目标是这样的,假如我有一张图片,图片的大小是400x400,上面有一个不太圆的圆,除了圆其他都是透明的,现在我要用QGraphicsItem来加载这张图片(我想自己重写QGraphicsItem,并不直接使用QGraphicsPixmapItem),最终我要把这些加载了图像的item当作一个button来处理,也即可以正常的响应鼠标事件,但是响应鼠标事件的区域必须要在圆形之内,而不要在图片本身的透明区域也响应这个鼠标事件。

如果方便的话,咱们可以在msn上交流,再次感谢您的回答。
lefttime 2010-09-03
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 binbin_123456 的回复:]

引用 3 楼 lefttime 的回复:

通过QPainterPath来定制即可~``


哥们,能不能够再具体点,例如用那个方法?

谢谢
[/Quote]
不需要调用特殊方法呀~``
举个例子吧 :)
......
QPainterPath path;
path.moveTo(100, 300);
path.lineTo(200, 200);
path.lineTo(300, 300);

QGraphicsPolygonItem* item = new QGraphicsPolygonItem;
item->setPolygon(path.toFillPolygon());
item->setFlag(QGraphicsItem::ItemIsMovable, true);
item->setFlag(QGraphicsItem::ItemIsSelectable, true);
......

scene->addItem(item);
binbin_123456 2010-09-03
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 lefttime 的回复:]

通过QPainterPath来定制即可~``
[/Quote]

哥们,能不能够再具体点,例如用那个方法?

谢谢
lefttime 2010-09-03
  • 打赏
  • 举报
回复
通过QPainterPath来定制即可~``
binbin_123456 2010-09-03
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 lefttime 的回复:]

QGraphicsItem中, boundingRect()返回的是item能绘制达到的最小包围框~`` 并不指定了它响应的区域!
对于在QGraphicsScene中显示的item, 鼠标点击的区域只有在item指定的path内才会得到响应, 所以不需要担心多余的区域呀?!
[/Quote]

那应该如何制定特定的path,以响应不规则的图形呢?

谢谢
lefttime 2010-09-03
  • 打赏
  • 举报
回复 1
QGraphicsItem中, boundingRect()返回的是item能绘制达到的最小包围框~`` 并不指定了它响应的区域!
对于在QGraphicsScene中显示的item, 鼠标点击的区域只有在item指定的path内才会得到响应, 所以不需要担心多余的区域呀?!

16,214

社区成员

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

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