问题的提出:
最近利用Graphics View Framework 实现一需求,其中要求鼠标按住QGraphicsWidget实现随意拖动,但调试发现鼠标、键盘的任何消息,QGraphicsWidget都无法响应,ItemIsMovable 、ItemIsSelectable 、ItemIsFocusable都已经通过如下代码设置:
setFlags(QGraphicsItem::ItemIsMovable | QGraphicsItem::ItemIsSelectable | QGraphicsItem::ItemIsFocusable | QGraphicsItem::ItemSendsGeometryChanges | QGraphicsItem::ItemUsesExtendedStyleOption);
接受鼠标悬浮事件也设置为true:
setAcceptHoverEvents(true);
依然不响应鼠标键盘消息,即下面代码都不响应:
virtual void mousePressEvent(QGraphicsSceneMouseEvent *event) override;
virtual void mouseReleaseEvent(QGraphicsSceneMouseEvent *event) override;
virtual void hoverEnterEvent(QGraphicsSceneHoverEvent *event) override;
virtual void hoverLeaveEvent(QGraphicsSceneHoverEvent *event) override;
virtual void keyPressEvent(QKeyEvent *event) override;
virtual void keyRele

在使用Qt的GraphicsView Framework时,遇到QGraphicsWidget无法响应鼠标和键盘事件的问题。经过排查发现,必须实现`boundingRect()`和`shape()`函数,并确保返回的矩形区域和QPainterPath非空且足够大。同时,设置ItemIsSelectable和ItemIsFocusable标志也是关键。只有这样,QGraphicsWidget才能正确接收和处理鼠标键盘事件。
最低0.47元/天 解锁文章
1万+





