我的班级结构是:
一个名为FloatingButtonItem的类继承了QGraphicsPixmapItem。
class FloatingButtonItem : public QGraphicsPixmapItem
{
(...) 并重新实现这五个函数。
protected:
void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget);
void mousePressEvent(QGraphicsSceneMouseEvent *event);
void mouseReleaseEvent(QGraphicsSceneMouseEvent *event);
void hoverEnterEvent(QGraphicsSceneHoverEvent *event);
void hoverLeaveEvent(QGraphicsSceneHoverEvent *event);
他们每个人都只是改变一个布尔变量的值并打印一条消息。
在构造函数中我有:
FloatingButtonItem::FloatingButtonItem(MyGraphicsScene* scene, QGraphicsItem* parent) : QGraphicsPixmapItem(parent)
FloatingButton 被完美地绘制,但未收到悬停事件。
在你问它之前:是的,我在创作中添加了这一行:
**setAcceptHoverEvents(true);**
setFlag(ItemIsMovable, true);
setFlag(ItemSendsGeometryChanges, true);
setZValue(20.0);
并且该项目完美地出现在其余项目的前面。
创建它之后,我使用“addItem”函数将它添加到场景中。
创作有问题吗?与育儿?
另一方面,我有另一个继承自QGraphicsPolygonItem的类,以及我称之为 GenericItem 的类,它是这样创建的:
class GenericItem : public QObject {
Q_OBJECT
...
它确实适用于悬停事件。显然是一样的......添加 Q_OBject 并使其继承自 QObject 不起作用。
编辑:我添加另一条评论:我检查了边界矩形。没关系。大小不为 0。
编辑2: 关于边界框:
我也重新实现了 boundingRect 函数:
QRectF boundingRect () const { return boundingRect_; }
并且在创建中使用像这样选择的 Pixmap 计算边界矩形:
boundingRect_ = QRectF( -pix.width()/2, -pix.height()/2, pix.width() , pix.height());
setPos(-pix_.width()/2,-pix_.height()/2);
有任何想法吗?