2011-06-14 70 views
0

我在嘗試OpenGL ES 2.0的hello三角形示例。我使用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的事情是,我不得不重新實施該項目的邊界矩形,如果我只是用

QRectF myGraphicsItem::boundingRect() const 
{ 

    return QGraphicsItem::boundingRect(); 
} 

它說:未定義的參考`的QGraphicsItem :: boundingRect()const的」

我原本使用

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! :)