悬停事件在QGraphicsPixmapItem中不起作用

时间:2013-11-14 11:04:04

标签: qt4 hover qgraphicsitem

我的班级结构是:

一个名为 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);

每个都只是更改BOOLEAN变量的值并打印一条消息。

构造函数中我有:

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);

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

您声明这是您班级的构造函数: -

FloatingButtonItem::FloatingButtonItem(MyGraphicsScene* scene,  QGraphicsItem* parent) 
      :  QGraphicsPixmapItem(parent,scene)

如果查看QGraphicsPixmapItem的构造函数,文档会显示以下内容: -

QGraphicsPixmapItem(QGraphicsItem * parent = 0)
QGraphicsPixmapItem(const QPixmap & pixmap, QGraphicsItem * parent = 0)

两个构造函数都没有将QGraphicsScene作为第二个参数,这是你传递给基类的。

你应该创建你的pixmap项目并调用: -

pScene->addItem(floatingButtonItem);