在Qt 4.8.0中使用QGlWidget更改QWidget

时间:2012-02-29 15:54:07

标签: qt opengl qt4 qglwidget qt4.8

我正在开发一个当前使用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

2 个答案:

答案 0 :(得分:2)

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

看起来你正在创建一个临时的QGLFormat对象,该对象通过引用传递给QGLWidget,当该临时对象超出范围时,你将有一个无效的引用。

我会使用不同形式的构造函数。

答案 1 :(得分:1)

我发现了问题所在。 在我的QWidget类中,我有一个成员对象QPainter,我会在paint事件中重用它。我一直在搜索,发现这是一个不好的做法,所以现在我在paint事件的开头声明了一个QPainter对象,我的问题就解决了。