現在要做一個需要在父item上添加控制點(子item)來調整父item形狀的功能。
關鍵是子item移動之後,要把自己的位置信息交給父item,讓父item更新自己的形狀。
查看了很久Qt的document,需要在父ITEM中用setFiltersChildEvents(true)來設置允許攔截所有給子item的消息,然後再重載這個函數:
bool sceneEventFilter ( QGraphicsItem * watched, QEvent * event )
{
if(watched->type()==QGraphicsRectItem::Type) //我的子item都是rect
{
if(event->type() == QEvent::GraphicsSceneMouseMove)
{
//處理移動消息
}
else if(event->type() == QEvent::GraphicsSceneMouseRelease)
{
//處理鼠標釋放消息
}
}
return false; //false的話子item的消息仍然要被處理,如果返回true,子item的消息將不再被處理}
解決了這個問題。
重載時要注意判斷是否是自己想要攔截的item。
或者也可以使用
installSceneEventFilter
來設置允許攔截某item的消息,指定要過濾的item參考文章:http://blog.csdn.net/fly542/article/details/6459661