qgraphicsitem 自定义及组合,qgraphicsgroupitem

qgraphicsitem 自定义很简单,只需要继承qgraphicsitem即可例如下图

class item : public QGraphicsItem
{

public:
    item();
    ~item();
}

在实际的项目需求中,很多场景都需要对多个item同时进行操作,那么该如何将item进行组合呢?

我第一次尝试的时候是使用qgraphicsgroupitem,qt标准的类去管理,但是实际应用时却不方便,

因为我要对组合中的某一个item进行操作时,组合无法确定我点击的是哪一个item,他只能判断你选中了组合的boundingRect(组合的边界矩形),具体选中哪个item还需要写代码来确认,并且无法单独提示某一个选中的item的选中效果。

后来我采用父子关系解决这个问题,例如我现在需要将两个item进行组合,那么就可以将其中一个作为父,另外一个作为子,通过setParentItem函数进行绑定,这样完美的解决了单个item的选中问题,另外对父item进行拖拽操作时,子item直接被同步拖拽,直接满足需求哈哈哈哈。

itemtext->setParentItem(itemlayout);

!!!!但是,这样做之后需要注意一个关键问题,那就是坐标参考,正常情况下,qgraphicsitem 以场景为坐标系,通过setPos函数设置自身在场景中的位置,这也是后续实现拖拽,缩放的关键,然而当将一个item作为另一个item的儿子时,儿子的参考坐标系就是父的位置,不再是场景。

我就是因为这个问题踩的坑,因此计算子item的真实场景坐标时,只需要子的场景坐标 - 父的场景坐标,才是真实的场景坐标!!!!

第一次写博客,有什么不对的地方还请指出,自己也是在不断学习的过程。

  • 10
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值