我正在尝试改编此处精选的opengl Es示例“ Hello GL”-http://qt-project.org/doc/qt-4.8/opengl-hellogl-es.html。我基本上是在寻找一种简单的方法来将3D图形渲染窗口转换为使用Qt Creator创建的表单。

我尝试的第一件事:
网格布局是我在Qt Creator中创建的布局。

#include <QProcess>
#include <QWidget>
#include <QPushButton>
#include <QVBoxLayout>
#include <QTimer>
#include "glwidget.h"

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    GLWidget *glwidget = new GLWidget(); // This is mandatory. No problems here.
    QTimer *timer = new QTimer(this);    // Need this for the example to work.

    timer->setInterval(10); // Also necessary.

    ui->gridLayout->addWidget(glwidget);


哪个可以编译,但是随后由于分段错误而立即崩溃。

    ui->gridLayout->addWidget(new GLWidget);


Segfaults以相同的方式。

调试器将我指向qgridlayout.h的第104行:

   inline void addWidget(QWidget *w) { QLayout::addWidget(w); }


不知道该怎么做。也许QGLWidget想要在我调用ui-> setupUi(this)之前做点什么?也许由于某种原因它无法将小部件添加到布局中?

当然,如果我在添加小部件的行中注释掉,该程序就可以正常工作。

对这里发生的事情有什么想法吗?

编辑:我已解决此问题。操作顺序有问题-我打电话给updateui太快了。

最佳答案

生成的表单类中的setupUi函数将初始化表单类的所有变量,因此,在初始化表单之前使用变量是未定义的行为,因为变量包含垃圾。

因此解决方案是调用:

ui->setupUi(this)


在使用ui对象中的变量的任何调用之前。

关于c++ - QGLWidget在添加到布局时崩溃,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23369778/

10-10 21:09
查看更多