2011-11-18 3 views
1

에 호출되지 itemChanged : 업데이트의 모든 작업이 이루어지는 곳 http://www.java2s.com/Code/Cpp/Qt/InteractwithQGraphicsItem.htm이 예에서 QGraphicsItem

itemChange() 함수입니다. 그러나이 함수는 핸들을 이동할 때 호출되지 않는 것 같습니다. 에 따르면

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

내가 상상 상태 변경, 위치를 포함 할 때마다 호출해야합니다. 핸들을 이동할 때이 함수를 호출하는 방법을 설명 할 수 있습니까? qt documentation에서

+1

누락 된 항목은 모두 setFlag (ItemSendGeometryChanges);입니다. 죄송합니다. –

답변

5

QGraphicsItem::ItemPositionChange 확인 :

항목의 위치 변경. 이 알림은 ItemSendsGeometryChanges 플래그가 사용 설정되어 있고 항목의 로컬 위치가 부모와 관련하여 변경된 경우 (즉, setPos() 또는 moveBy()을 호출 한 결과) 알림이 전송됩니다. 값 인수는 새 위치 (즉, QPointF)입니다. 원래 위치를 얻으려면 pos()으로 전화하십시오. setPos() 또는 moveBy()itemChange()으로 보내지 마십시오.이 알림은 입니다. 대신 새 조정 위치를 itemChange()에서 반환 할 수 있습니다. 이 알림 후 QGraphicsItem은 위치가 변경된 경우 즉시 ItemPositionHasChanged 알림을 보냅니다.

그래서 당신은 itemChange 때 위치 변경을 불렀다하기 위해 플래그 QGraphicsItem::ItemSendsGeometryChanges를 사용하도록 설정해야합니다.

기본적으로이 disabled for optimization입니다 : 성능상의 이유로

은, 이러한 알림은 기본적으로 비활성화되어 있습니다. 위치 변경 및 변환 변경에 대한 알림을 받으려면이 플래그를 사용해야합니다.이 플래그는 Qt 4.6에서 추가되었습니다.

플래그를 설정하려면 setFlag 함수를 사용자 정의 항목의 생성자에서 호출해야합니다.

item->setFlag(GraphicsItem::ItemSendsGeometryChanges); 
+0

webclectic - 당신 말이 맞아요. 나는 새로운 문제가있다 - http://programmingexamples.net/wiki/Qt/Utilities/HandleItem 오른쪽 핸들을 따라 직사각형의 오른쪽 가장자리를 만들려고 노력하고있다. 그러나 핸들이 사각형보다 빠르게 이동하는 것처럼 보입니다. 디버그 출력을 추가했고 모든 것이 올바르게 보이지만 결과가 잘못되었습니다! 어떤 제안? –

+0

point.setX (m_item-> boundingRect(). right())를 변경하면 나타납니다. to point.setX (m_item-> boundingRect(). right() - pos(). x()); boundingRect에서 이 올바르게 작동합니다. 내가 말하는 것은 "사각형의 오른쪽 모서리에 대한 핸들 모서리의 x 좌표를 설정합니다 - 핸들 위치"입니다.나는 이해하지 못한다. - 핸들의 모서리의 x 좌표가 핸들의 위치와 같지 않아야 하는가 ?? 왜 boundingRect를 구현해야합니까? –

관련 문제