在没有Qt的计算机上"Failed to make context current."



所以我一直在尝试开发一个Qt应用程序,并在另一台没有安装Qt的Windows 8.1机器上运行它。在我的第一台计算机上,我使用 Visual Studio 2013 开发我的应用程序,并使用多线程 DLL 标志在发布模式下编译它。

这将生成一个.exe文件。在同一个文件夹中,我有:

accessible/                platform/
assimp.dll                 kernel32.dll                   
icudt52.dll                icuin.dll
icuuc52.dll                opengl32.dll                  
libEGL.dll                 libGLESv2.dll
Qt5Core.dll                Qt5Gui.dll
Qt5OpenGL.dll              Qt5Widgets.dll
msvcp110.dll               msvcr110.dll
msvcp120.dll               msvcr120.dll

我从 C:/Qt32bits/5.3/msvc2013_opengl/复制了 Qt DLL。除了libEGL.dll和libGLESv2.dll我从QtCreator得到的,因为我在以前的文件夹中找不到它们。但是,这应该不是问题,因为我正在使用msvc(不是mingw(进行编译,对吗?

在我的代码中,一开始我有:

QApplication app(argc, argv);
QGLFormat format;
format.setProfile(QGLFormat::CoreProfile);
format.setVersion(4, 0);
QGLFormat::setDefaultFormat(format);
/*And then later*/
cout <<  "Creating Window" << endl;
GLWidget *widget = new GLWidget(i); //i is the id of the widget
cout << "Widget created" << endl;
widget->makeCurrent();
cout << "Context current" << endl;

GLWidget派生自QGLWidget,在构造函数中,我只是将其ID属性设置为i。

在我的机器上,一切正常。但是当我在第二台机器上运行我的可执行文件时,我得到输出:

"Creating Window"
"Failed to make context current."
"Widget created"
"Context current"

然后它崩溃了(MyApp.exe已经停止工作(...奇怪的是,"未能使上下文当前"(我相信是由makeCurrent((生成的(出现在"创建小部件"之前......知道出了什么问题以及如何调试它吗?

非常感谢您的时间和帮助!

最后是混合问题:

  1. 根据依赖 walker 的说法,我使用的 opengl32.dll 似乎是 64 位的(奇怪的是我从 C:/System32/中获取了它(。我下载了一个新的 32 位,它工作正常。谢谢塞巴斯蒂安·兰格。

  2. 第二个问题可能来自第二台机器的显卡/OpenGL。我已经在第三台计算机上尝试过,现在它工作正常。谢谢瓦汉乔。

希望这可以帮助未来的编码人员!

相关内容

  • 没有找到相关文章