【发布时间】:2014-04-29 16:04:30
【问题描述】:
我正在尝试调整此处介绍的 opengl Es 示例“Hello GL” - http://qt-project.org/doc/qt-4.8/opengl-hellogl-es.html。我基本上是在寻找一种简单 方法来将 3D 图形渲染窗口转换为用 Qt 创建器制作的表单。
我尝试的第一件事: 网格布局是我在 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。
【问题讨论】:
-
请注意,QGLWidget 已被弃用,从 Qt 5 开始,建议改用 QOpenGLWidget,尤其是对于 opengl-es。
-
这个问题已经很老了,但这个问题与 opengl-es 无关——我正在将示例“改编”成标准的 opengl。
标签: c++ qt opengl opengl-es segmentation-fault