我的班级结构是:
一个名为 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);
有什么想法吗?
答案 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);