QGraphicsItem -> получить правильный ограничивающий прямоугольник - PullRequest
0 голосов
/ 15 июня 2011

Я пробую пример треугольника приветствия OpenGL ES 2.0.Я использую 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 ]

2 голосов
/ 15 июня 2011

QGraphicsItem::boundingRect() - это чисто виртуальная функция. Таким образом, нет реализации. Вы должны предоставить свою собственную реализацию. Исходя из ваших вершин, вероятно

QRectF myGraphicsItem::boundingRect() const
{
  return QRectF(-0.4, -0.4, 0.8, 0.8);
}
0 голосов
/ 30 июля 2016

Я бы сделал (в 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! :)
0 голосов
/ 15 июня 2011

Я не уверен, что следую, если вы используете QGraphicsItem (с окном просмотра OpenGL или без него), вы обычно используете QGraphicsItem :: boundingRect () , чтобы получить ограничивающий прямоугольник?

...