自定义QGraphicsItem

前言

QGraphicsItem 是场景中 item 的基类。图形视图提供了一些典型形状的标准 item,例如:矩形 ( QGraphicsRectItem )、椭圆 ( QGraphicsEllipseItem ) 、文本项 ( QGraphicsTextItem )。当这些不满足需求时(例如:需要一些特定形状时),往往需要自定义,通常的做法就是继承 QGraphicsItem(QGraphicsObject)。

自定义Item

必须要实现两个虚函数,否则会报allocating an object of abstract class type “xxxx”。
void paint() : 以本地坐标绘制 item 的内容
QRectF boundingRect() : 将 item 的外边界作为矩形返回由 QGraphicsView 调用以确定什么区域需要重绘

除此之外,可能还需要附加其他需求,
例如:QPainterPath shape() - item 的形状 由contains() 和 collidesWithPath() 用于碰撞检测。如果未实现,则默认为 boundingRect()。
使用信号/槽、属性机制:继承 QObject 和 QGraphicsItem(或直接继承 QGraphicsObject)
处理鼠标事件:重新实现 mouse***Event()
处理键盘事件:重新实现 key***Event()
处理拖放事件:重新实现 drag***Event()、dropEvent()

Bounding Rect

将 item 的外边界定义为矩形,所有绘制必须限制在此区域内,QGraphicsView 使用它来确定 item 是否需要重绘。
虽然 item 的形状可以是任意的(例如:直线、椭圆、矩形 ),但是 bounding rect 总是矩形,并且不受 item 变换的影响。

Shape

它是一个虚函数,具体需求依靠自己去实现。
以本地坐标中的 QPainterPath 形式返回 item 的形状。形状可用于许多事情,包括:碰撞检测,命中测试以及 QGraphicsScene::items() 函数。
shape() 默认实现调用 boundingRect() 返回一个简单的矩形形状,但子类可以重新实现该函数,以返回非矩形 item 更准确的形状。例如,一个圆形 item 可以选择返回椭圆形状,以便更好地进行碰撞检测。
shape() 由 contains() 和 collidesWithPath() 的默认实现调用。

collidesWithItem

它用来判断item与其他item是否有碰撞。

参考这篇博客:https://blog.csdn.net/chen_yi_long/article/details/8273644
多多少少 会有些 灵感

对于一些要生成特定item,依据实际需要添加,然后实现特定函数功能。可能 会结合 QPropertyAnimation QGraphicsItemAnimation QTime 实现一些特定效果

参考博客:https://www.cnblogs.com/klcf0220/p/10316510.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

道阻且长,行则降至

无聊,打赏求刺激而已

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值