itemChanged从未调用过QGraphicsItem

时间:2011-11-18 19:12:16

标签: qt qt4

在这个例子中: http://www.java2s.com/Code/Cpp/Qt/InteractwithQGraphicsItem.htm

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

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

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

1 个答案:

答案 0 :(得分:6)

qt documentation检查QGraphicsItem::ItemPositionChange

  

项目的位置发生变化。如果是,则发送此通知   ItemSendsGeometryChanges标志已启用,当项目为本地时   相对于其父级的位置变化(即,作为调用的结果   setPos()moveBy())。 value参数是新位置(即a   QPointF)。您可以致电pos()以获取原始职位。 不要打电话   此通知是setPos()中的moveBy()itemChange()   交付; ,您可以返回新的,调整后的位置   itemChange()。发出此通知后,QGraphicsItem会立即发送   如果职位发生变化,ItemPositionHasChanged通知。

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

默认情况下,这是disabled for optimization

  

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

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

item->setFlag(GraphicsItem::ItemSendsGeometryChanges);