itemChanged从未调用过QGraphicsItem

Dav*_*ria 2 qt qt4

在此示例中:http: //www.java2s.com/Code/Cpp/Qt/InteractwithQGraphicsItem.htm

itemChange()函数是所有更新工作发生的地方.但是,当我移动手柄时,似乎没有调用此函数.根据:

http://doc.qt.io/qt-4.8/qgraphicsitem.html#itemChange

只要状态发生变化就应该调用它,我想这会包括位置.任何人都可以解释如何在移动句柄时调用此函数吗?

pne*_*zis 6

qt文档中检查QGraphicsItem::ItemPositionChange:

项目的位置发生变化.如果ItemSendsGeometryChanges标志已启用,并且项目的本地位置相对于其父项发生更改(即,作为调用setPos()或的结果), 则会发送此通知 moveBy().value参数是新位置(即a QPointF).你可以打电话pos()来获得原来的位置.通知发出时不要打电话setPos()或打电话 ; moveBy()itemChange()相反,您可以从中返回新的,调整后的位置 itemChange().在此通知之后,如果位置发生变化,QGraphicsItem立即发送ItemPositionHasChanged通知.

因此,您应该启用该标志QGraphicsItem::ItemSendsGeometryChanges,以便itemChange在位置更改时进行调用.

默认情况下,这是优化禁用:

出于性能原因,默认情况下会禁用这些通知.您必须启用此标志才能接收位置和变换更改的通知.这个标志在Qt 4.6中引入.

为了设置标志,您setFlag最好在自定义项的构造函数中调用该函数.

item->setFlag(GraphicsItem::ItemSendsGeometryChanges);
Run Code Online (Sandbox Code Playgroud)