事件由scene传递给item
先由item的event()处理,如果在event()中 return false,交由sceneEvent()处理
如果return true则不交由sceneEvent()处理

默认情况下event()直接返回false,但是例如tab按键在sceneEvent()中不进行分发,可以在event()中处理

待继续看一下还有什么其他关系

事件由scene传递给item先由item的event()处理,如果在event()中 return false,交由sceneEvent()处理如果return true则不交由sceneEvent()处理 有geometry()。 可使用 setLayout() 和 layout()支持布局。 支持使用grabShortcut() 和insertAction() 的快捷键和QAction。 与 QGraphicsItem 不同,QGraphicsWidget不是抽象类。 2、由于QGraphicsWidget与QWi QGraphicsItem event s QGraphcisItem通过QGraphicsScene的 sceneEvent ()这个虚函数来获取事件。这个虚函数把最常见的事件分配给事件处理程序: 1.contextMenu Event ()处理上下文菜单事件; 2.focusIn Event ()和focusOut Event ()处理是否聚焦的事件; 3....
QGraphicsItem 事件的传递顺序和通常的事件传递顺序不同 在QGraphics 例如mousePress Event 的传递顺序是 view传递给scene在传递给item 在scene 的mousePress Event 已经调用item->setFocus(),所以重写item event ()并不能拦截焦点的设置,重写Scene event ()才可以 在图形视图框架 ,QGraphicsScene 提供一个快速的接口,用于管理大量 item, QGraphicsItem 是场景 item 的基类。 图形视图提供了一些典型形状的标准 item,当然,我们也可以自定义 item。除此之外, QGraphicsItem 还支持以下特性: 鼠标按下、移动、释放和双击事件,以及鼠标...
今天在测试别人遗留的bug的时候,发现一个细节,很容易忽略的问题,记录下 在对基于 QGraphicsItem 的类进行封装的时候,出现一个问题,就是拖动或者涉及到mouseMove Event ()函数的时候,会出现位置不准确,达不到理论的移动效果,(逻辑是正确的) 是由于在重写的函数 添加了 QGraphicsItem ::mouseMove Event ( event );这是我们的习惯导致的, Qt的QGra...
1、QGraphicsEllipseItem是椭圆Item; 2、QGraphicsLineItem是线Item; 3、QGraphicsPathItem是路径item,是曲线、直线或者折线相连的一条线; 4、QGraphicsPixmapItem是图片Item,这个图片可以是常用的几种图片格式; 5、QGraphicsPolyg MyGraphicsItem( QGraphicsItem *parent = nullptr) : QGraphicsItem (parent) {} QRectF boundingRect() const override return QRectF(0, 0, 100, 100); void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) override if (option->state & QStyle::State_Selected) painter->setPen(Qt::red); painter->setBrush(Qt::red); painter->setPen(Qt::black); painter->setBrush(Qt::white); painter->drawRect(boundingRect()); class MyGraphicsView : public QGraphicsView public: MyGraphicsView(QWidget *parent = nullptr) : QGraphicsView(parent) setScene(new QGraphicsScene(this)); MyGraphicsItem *item = new MyGraphicsItem; scene()->addItem(item); protected: void mousePress Event (QMouse Event * event ) override QGraphicsView::mousePress Event ( event ); QGraphicsItem *item = scene()->itemAt(mapToScene( event ->pos()), transform()); if (item) item->setSelected(true); 这里重写了MyGraphicsItem的paint()函数,在选 时将颜色设置为红色,未选 时设置为白色。在MyGraphicsView 重写了mousePress Event ()函数,当鼠标点击时获取当前位置的item并设置为选 状态。