2011-06-14 2 views
0

OpenGL ES 2.0의 삼각형 예제를 시도하고 있습니다. Qt를 사용하고 있으므로 QGraphicsScene을 만들고이 코드를 QGraphicsItem으로 추가했습니다. 그것은 올바르게 그려 지지만 경계 사각형을 올바르게 가져올 수 없습니다. 삼각형의 꼭지점은 QGraphicsItem -> 올바른 경계 사각형 얻기

GLfloat afVertices[] = 
{-0.4f,-0.4f,0.0f, 
0.4f ,-0.4f,0.0f, 
0.0f ,0.4f ,0.0f}; 

내 뷰포트는 glViewport(0, 0, 800, 480);

은 무엇 정확한 경계 RECT 좌표 것입니까?

뷰포트를 QGLWidget으로 설정했습니다. QGraphicsItem을 가진 것은 내가 항목의 경계 사각형을 다시 구현해야하고 나는 그냥 QGraphicsItem :: boundingRect() const를 '

`에 정의되지 않은 참조를 말한다

QRectF myGraphicsItem::boundingRect() const 
{ 

    return QGraphicsItem::boundingRect(); 
} 

를 사용하는 경우이다

원래 사용 했었습니다

QRectF myGraphicsItem::boundingRect() const 
{ 
    return QRectF(-0.4, -0.4, 0.8, 0.8); 
} 

하지만 결과는 매우 작은 경계 상자입니다. 겉으로보기에는 정확한 것은 제가 시행 착오를 거쳐 QRectf(300, 200, 200, 200)과 같은 값을 사용했을 때 만들어졌습니다. 이것은 너무 '매뉴얼'입니다. 그래서 내가 모르는 좌표 전달이나 변형이 있는지 궁금합니다.

답변

0

QGraphicsItem (OpenGL 뷰포트의 유무에 관계없이)을 사용하는 경우 일반적으로 QGraphicsItem::boundingRect()을 사용하여 경계 사각형을 가져올 수 있습니까?

2

QGraphicsItem::boundingRect()은 순수 가상 기능입니다. 따라서 구현이 없습니다. 자체 구현을 제공해야합니다. 아마

QRectF myGraphicsItem::boundingRect() const 
{ 
    return QRectF(-0.4, -0.4, 0.8, 0.8); 
} 
0

내가 (파이썬에서) 할 것입니다, 당신의 정점에 근거 :

# inside class 
    def parentBoundingRect(self): 
     return self.mapToParent(self.boundingRect()).boundingRect() 

# or if that doesn't work 
    def parentBoundingRect(self): 
     pos = self.pos() 
     rect = self.transform().mapToPolygon(self.boundingRect()).boundingRect() 
     return QRectF(pos.x(), pos.y(), rect.width(), rect.height()) 

# or if that doesn't work, keep playing with it til it does! :)