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