Изменение QWidget с помощью QGlWidget в Qt 4.8.0

Я работаю над приложением, которое в настоящее время использует QWidgets для рендеринга движущихся изображений, и я пытаюсь перейти от использования QWidgets к QGlWidgets, но мое приложение продолжает падать. Единственные модификации, которые я сделал, это:

из этого:

class MyClass : public QWidget 
{
     MyClass(QWidget *parent):QWidget(parent)
     {
          ...
     }
}

к этому:

class MyClass : public QGlWidget 
{
     MyClass(QWidget *parent):QGlWidget(QGLFormat(QGL::SampleBuffers),parent)
     {
          ...
     }
}

Должен ли я больше изменять свой код, если да, то какие еще модификации необходимы?

В настоящее время я использую Visual Studio 2010 и qt 4.8.0.


person GlassFish    schedule 29.02.2012    source источник


Ответы (2)


MyClass(QWidget *parent):QGlWidget(QGLFormat(QGL::SampleBuffers),parent)
     {
          ...
     }

Похоже, вы создаете временный объект QGLFormat, который передается по ссылке в QGLWidget, и когда этот временный объект выходит за пределы области действия, у вас будет недопустимая ссылка.

Я бы использовал другую форму конструктора.

person tmpearce    schedule 29.02.2012
comment
Я удалил этот бит QGLFormat(QGL::SampleBuffers), и он все еще падает. Если я соберу с релизными библиотеками, приложение просто умрет без сообщений об ошибках. С отладочными отладчик указывает на функцию void setHasComplexGeometry(bool hasComplexGeometry), из qgengineshadermanager_p.h - person GlassFish; 01.03.2012

Я нашел, в чем проблема. В моем классе QWidget у меня был объект-член QPainter, который я повторно использовал в событии рисования. Я продолжал искать и обнаружил, что это плохая практика, поэтому теперь я объявил объект QPainter в начале события рисования, и моя проблема решена.

person GlassFish    schedule 01.03.2012