“无法使上下文更新。”在没有Qt的计算机上

时间:2014-12-01 08:21:40

标签: qt dll opengl-4

所以我一直在尝试开发一个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。我从QtCreator获取的libEGL.dll和libGLESv2.dll除外,因为我无法在上一个文件夹中找到它们。但是,这不应该是一个问题,因为我正在编译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已停止工作)......奇怪的是&#34;无法使上下文保持最新状态&#34; (我相信是由makeCurrent()生成的)来自&#34; Widget创建&#34; ... 知道什么是错的以及我如何调试它?

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

1 个答案:

答案 0 :(得分:0)

最后,这是一系列问题:

  1. 我使用的opengl32.dll根据依赖性walker似乎是64位(奇怪的是我从C:/ System32 /获取它)。我下载了一个新的32位,它工作正常。谢谢Sebastian Lange。

  2. 第二个问题可能来自第二台机器的显卡/ OpenGL。我试过第三台电脑,现在工作正常。谢谢vahancho。

  3. 希望这可以帮助未来的程序员!