2012-02-29 105 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