我有一个由我的同学编写的以下代码(我们正在开展一个项目):
//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 。但是,如果我使用QOpenGLFunctions
和QOpenGLFunctions_2_0
,我是否真的需要这个... ...
根据wiki条目,Direct X SDK
是Windows SDK
的一部分所以我也怀疑我已经有 ANGLE ,因为我已经有了一些Windows SDK:
同样根据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:
我是唯一一个(项目中有6个人)有这个问题的人。通常我的问题更准确,但我迷失在这里。我该怎么办?
答案 0 :(得分:0)
嗯,解决方案非常简单......
根据this文章可以通过QT_OPENGL
环境变量和以下应用程序属性配置加载机制 ......
所以我将QT_OPENGL
设置为desktop
作为系统环境变量:
控制面板&gt;系统&gt;高级系统设置&gt;环境变量
我确信我的电脑讨厌我......干杯!