在此示例中:http: //www.java2s.com/Code/Cpp/Qt/InteractwithQGraphicsItem.htm
itemChange()函数是所有更新工作发生的地方.但是,当我移动手柄时,似乎没有调用此函数.根据:
http://doc.qt.io/qt-4.8/qgraphicsitem.html#itemChange
只要状态发生变化就应该调用它,我想这会包括位置.任何人都可以解释如何在移动句柄时调用此函数吗?
从qt文档中检查QGraphicsItem::ItemPositionChange:
项目的位置发生变化.如果
ItemSendsGeometryChanges标志已启用,并且项目的本地位置相对于其父项发生更改(即,作为调用setPos()或的结果), 则会发送此通知moveBy().value参数是新位置(即aQPointF).你可以打电话pos()来获得原来的位置.在通知发出时不要打电话setPos()或打电话 ;moveBy()itemChange()相反,您可以从中返回新的,调整后的位置itemChange().在此通知之后,如果位置发生变化,QGraphicsItem立即发送ItemPositionHasChanged通知.
因此,您应该启用该标志QGraphicsItem::ItemSendsGeometryChanges,以便itemChange在位置更改时进行调用.
默认情况下,这是优化禁用:
出于性能原因,默认情况下会禁用这些通知.您必须启用此标志才能接收位置和变换更改的通知.这个标志在Qt 4.6中引入.
为了设置标志,您setFlag最好在自定义项的构造函数中调用该函数.
item->setFlag(GraphicsItem::ItemSendsGeometryChanges);
Run Code Online (Sandbox Code Playgroud)