2012-02-29 104 views
0

我正在研究当前使用QWidgets呈现动态图像的应用程序,并试图从使用QWidgets移动到QGlWidgets,但我的应用程序不断崩溃。 我所做的唯一修改是:在Qt 4.8.0中使用QGlWidget更改QWidget

从这个:

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

回答

1

我发现问题所在。 在我的QWidget类中,我有一个成员对象QPainter,我将在paint事件中重用。我一直在搜索,发现这是一个不好的做法,所以现在我在绘制事件的开始处声明了一个QPainter对象,并且我的问题已解决。

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

它看起来像你创建一个临时QGLFormat对象,该对象通过引用传递到QGLWidget来绘图,并当临时对象超出范围,你会有一个无效的参考。

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

+0

我删除了这个位“QGLFormat(QGL :: SampleBuffers)”,它仍然崩溃。如果我使用发行库构建,应用程序就会死亡,并且没有错误消息。通过调试,调试器将指向函数void setHasComplexGeometry(bool hasComplexGeometry),来自qglengineshadermanager_p.h – Dragarro 2012-03-01 07:15:39