내가 일부 사용자 지정 QGraphicsItems에게이 돌아갑니다.
주어진 (x, y) 좌표에서보기에 Item이 있는지 알고 싶습니다. 내가 가진 내 응용 프로그램에서를 QGraphicsView :: itemAt() 메소드는 항상 <em>QGraphicsScene</em>의 <em>를 QGraphicsView</em> 제로
class CustomScene : public QGraphicsScene
{
protected:
void mousePressEvent(QGraphicsSceneMouseEvent *event)
{
if (QGraphicsItem *item = itemAt(event->scenePos())) {
qDebug() << "You clicked on item" << item;
}
else {
qDebug() << "You didn't click on an item.";
}
}
};
:
- 클래스 "화면 : 화면 (는 QWidget * 부모)는 QWidget (부모 내가 QGraphicsScene로 다음과 같은 클래스를 사용 목적을 테스트하려면) {...} "내 클래스의 인스턴스 내부"CustomScene : public QGraphicsScene {...} "및 클래스 QGraphicsView의 인스턴스와 함께.
- QGraphicsView에 추가 된 "Rect : public QGraphicsRectItem {...}"클래스의 일부 인스턴스는 계산 후 일부 직사각형을 그립니다.
응용 프로그램을 실행하고 그려진 직사각형을 클릭하면 항상 "항목을 클릭하지 않았습니다." 메시지.
이전 게시물에서 검색하거나 Google에서 검색하면서 코드가 작동하지 않는 이유를 찾지 못했습니다. 내가 도대체 뭘 잘못하고있는 겁니까?
편집 1 : boundingRect() 메서드가 올바르게 반환됩니다. QGraphicsRectItem을 추가하려고 시도했는데 itemAt() 메서드가 해당 정보를 올바르게 반환합니다.
사용자 지정 항목이 올바른 경계 rect를 반환합니까? – Omid
예, 내 맞춤 항목의 boundingRect() 메소드가 올바른 정보를 반환합니다. 나는 이것을 "Edit 1"에 추가했다. – diegob
'shape()'을 오버라이드 했습니까? 이것은 히트 감지에 사용됩니다. 특히 –