QGraphicsItem - >得到正确的边界矩形

时间:2011-06-14 22:27:08

标签: qt opengl-es-2.0 bounding

我正在尝试OpenGL ES 2.0的hello三角形示例。我正在使用Qt,因此我创建了一个QGraphicsScene并将该代码添加为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);

正确的边界矩形坐标是什么?

我将视口设置为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)这样的值时创建的 - 这太过于'手动' - 所以我想知道可能存在某种我不知道的坐标对应或转换。

3 个答案:

答案 0 :(得分:2)

QGraphicsItem::boundingRect()是纯虚函数。因此,没有实施。您必须提供自己的实现。基于您的顶点,可能是

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

答案 1 :(得分:0)

我不确定我是否遵循,如果您使用的是QGraphicsItem(有或没有OpenGL视口),您通常会使用QGraphicsItem::boundingRect()来获取边界矩形?

答案 2 :(得分: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! :)