Qt 5.9 - 由于glLoadIdentity

时间:2017-08-12 22:10:48

标签: c++ windows qt opengl

我有一个由我的同学编写的以下代码(我们正在开展一个项目):

//inside cqtopencvviewergl.cpp
void CQtOpenCVViewerGl::resizeGL(int width, int height)
{
    makeCurrent();

    glViewport(0, 0, (GLint)(width), (GLint)(height));

    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();

    glOrtho(0, width, -height, 0, 0, 1);

    glMatrixMode(GL_MODELVIEW);

    recalculatePosition();

    emit imageSizeChanged(mRenderWidth, mRenderHeight);

    updateScene();
}

glLoadIdentity()的调用根据调试器导致Exception at 0x0, code: 0x0000005,在我的情况下为C:\Program Files (x86)\Windows Kits\10\Debuggers\x86\cdb.exe

我知道该函数已弃用。但我对所有关于我应该怎么做的信息来源感到非常困惑。所以我会帮助你解决迷失方向,希望你能帮助我...

根据this回答,发生异常是因为不推荐使用的函数。但问题不同,因为我(或我们)以不同的方式包含openGL:

cqtopencvviewergl.cpp的顶部,我们包含以下内容:

#include "include/Gui/cqtopencvviewergl.h"
#include <QOpenGLFunctions>
#include <opencv2/opencv.hpp>
#include <QPalette>

cqtopencvviewergl.h的顶部我们包括:

#include <QOpenGLWidget>
#include <QOpenGLFunctions_2_0>
#include <opencv2/core/core.hpp>

所以我们使用Qt类来调用openGL函数。我查看了代码,似乎Qt处理了弃用本身。

同样根据this回答Qt 支持所有当前的桌面OpenGL版本

根据问题this提问者的How to replace following (deprecated) OpenGL functions?回答, Windows离线安装程序默认为基于ANGLE的。我使用了离线安装程序......

根据qt wiki中的this条目要使用ANGLE 编译Qt,我必须安装Direct X SDK 。但是,如果我使用QOpenGLFunctionsQOpenGLFunctions_2_0,我是否真的需要这个... ...

根据wiki条目,Direct X SDKWindows SDK的一部分所以我也怀疑我已经有 ANGLE ,因为我已经有了一些Windows SDK:

enter image description here

同样根据this文章,我应该使用configure -opengl dynamic,因为我使用的是Windows,我试图找出在configure中调用configure.bat -opengl desktop并在{{3}中找到configure.bat -opengl dynamic的位置文章。所以想要运行configure.bat但我在C:\Qt\Qt5.9.1目录中找不到InputEvent ...

我使用以下Qt Kit:

this

我是唯一一个(项目中有6个人)有这个问题的人。通常我的问题更准确,但我迷失在这里。我该怎么办?

1 个答案:

答案 0 :(得分:0)

嗯,解决方案非常简单......

根据this文章可以通过QT_OPENGL环境变量和以下应用程序属性配置加载机制 ......

所以我将QT_OPENGL设置为desktop作为系统环境变量:

  

控制面板&gt;系统&gt;高级系统设置&gt;环境变量

enter image description here

我确信我的电脑讨厌我......干杯!