在 Qt 4.8.0 中使用 QGlWidget 更改 QWidget
Posted
技术标签:
【中文标题】在 Qt 4.8.0 中使用 QGlWidget 更改 QWidget【英文标题】:Changing QWidget with QGlWidget in Qt 4.8.0 【发布时间】:2012-02-29 15:54:06 【问题描述】:我正在开发一个当前使用 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
【问题讨论】:
【参考方案1】:MyClass(QWidget *parent):QGlWidget(QGLFormat(QGL::SampleBuffers),parent)
...
看起来您正在创建一个临时 QGLFormat 对象,该对象通过引用传递给 QGLWidget,当该临时对象超出范围时,您将获得一个无效的引用。
我会使用不同形式的构造函数。
【讨论】:
我删除了这个位“QGLFormat(QGL::SampleBuffers)”,它仍然崩溃。如果我使用发布库构建,应用程序就会死掉,没有错误消息。使用调试器,调试器指向函数 void setHasComplexGeometry(bool hasComplexGeometry),来自 qglengineshadermanager_p.h【参考方案2】:我发现了问题所在。 在我的 QWidget 类中,我有一个成员对象 QPainter,我将在绘制事件中重用它。我一直在寻找,发现这是一个不好的做法,所以现在我在绘制事件开始时声明了一个 QPainter 对象,我的问题就解决了。
【讨论】:
以上是关于在 Qt 4.8.0 中使用 QGlWidget 更改 QWidget的主要内容,如果未能解决你的问题,请参考以下文章