我使用OpenGL创建一个新的Qt应用程序,只需像这样添加场景:
{
ui->setupUi(this);
QGraphicsView *pSceneView = new QGraphicsView(this);
setCentralWidget(pSceneView);
QGLWidget *pGLWidget = new QGLWidget;
pSceneView->setViewport(pGLWidget);
pSceneView->setViewportUpdateMode(QGraphicsView::FullViewportUpdate);
pSceneView->setScene(new MainScene);
pGLWidget->makeCurrent();
QGLFunctions *glFuncs = new QGLFunctions(pGLWidget->context());
GLuint i;
glFuncs->glGenBuffers(1, &i);
glFuncs->glBindBuffer(GL_ARRAY_BUFFER, i); // unbind buffer cause crash
}
类MainScene继承自QGraphicsScene,只需设置SceneRect并重写drawBackground,如下所示:
MainScene::MainScene(QObject *parent /* = 0 */)
:QGraphicsScene(parent)
{
setSceneRect(-1024/2, -768/2, 1024, 768);
}
void MainScene::drawBackground(QPainter *painter, const QRectF &rect)
{
painter->drawRect(sceneRect());
}
如果我没有重写drawBackground或者没有调用glBindBuffer,它就不会崩溃.Qt版本是5.3.2,os是windows 7。
答案 0 :(得分:0)
根据你所说的,找出错误有点困难。 OpenGL功能可能取决于运行代码的系统。虽然您通常可以看到Qt无法与Qt Creator Application Output控制台窗口中的某些功能绑定,但是在没有实现某些功能时会发生类似的崩溃。
我遇到的问题很少,而且它们通常与OpenGL / videoadapter相关。有一种方法可以解决大多数问题,不过通过使用-openg es2标志构建Qt,当硬件无法提供所需的OpenGL级别时,该标志使用ANGLE技术模拟OpenGL。
而且,从Qt 5.4开始,我们可以通过切换到它来解决所有问题。 http://qt-project.org/wiki/New-Features-in-Qt-5.4他们承诺修复许多此类类型的错误,并在需要时对OpenGL进行适当的动态模拟。
我想您可以更轻松地尝试新的Qt(除非您已经这样做过)。