我的课程结构是:
名为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_; }
边界rect是在创建时使用如下选择的Pixmap计算得出的:
boundingRect_ = QRectF( -pix.width()/2, -pix.height()/2, pix.width() , pix.height());
setPos(-pix_.width()/2,-pix_.height()/2);
有任何想法吗?
您声明这是您的类的构造函数:-
FloatingButtonItem::FloatingButtonItem(MyGraphicsScene* scene, QGraphicsItem* parent)
: QGraphicsPixmapItem(parent,scene)
如果您查看QGraphicsPixmapItem的构造函数,则文档将显示以下内容:-
QGraphicsPixmapItem(QGraphicsItem * parent = 0)
QGraphicsPixmapItem(const QPixmap & pixmap, QGraphicsItem * parent = 0)
这两个构造函数都没有将QGraphicsScene作为第二个参数,这就是您要传递给基类的内容。
您应该创建您的像素图项目并调用:-
pScene->addItem(floatingButtonItem);
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句