【问题标题】:Changing QWidget with QGlWidget in Qt 4.8.0在 Qt 4.8.0 中使用 QGlWidget 更改 QWidget
【发布时间】: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

【问题讨论】:

    标签: qt opengl qt4 qglwidget qt4.8


    【解决方案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 对象,我的问题就解决了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-02-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-25
      • 1970-01-01
      相关资源
      最近更新 更多