2011-06-14 8 views
0

私はOpenGL ES 2.0のhello triangleの例を試しています。私はQtを使用しているので、QGraphicsSceneを作成し、そのコードをQGraphicsItemとして追加しました。それは正しく描画されますが、境界矩形を正しく取得できません。三角形の頂点がQGraphicsItem - >正しい境界矩形を取得

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

であり、私のビューポートが正しい境界RECT座標だろう何glViewport(0, 0, 800, 480);

のですか?

ビューポートを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

は、私は(Pythonで)行うだろう、あなたの頂点に基づいて:

# 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! :) 
関連する問題