2014-12-01 3 views
0

Итак, я пытаюсь разработать приложение Qt и запускать его на другой машине с Windows 8.1, у которой нет Qt. На моем первом компьютере я использовал Visual Studio 2013 для разработки моего приложения и скомпилировал его в режиме выпуска с помощью многопоточного DLL-флага.«Не удалось создать контекст». на компьютере без Qt

Это файл .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 

Я скопировал Qt библиотеки DLL из C: /Qt32bits/5.3/msvc2013_opengl/. За исключением 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, чтобы я.

На моей машине все работает нормально. Но когда я запускаю мой исполняемый файл на второй машине, я получаю выход:

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

И тогда он выходит из строя (MyApp.exe перестал работать) ... Что странно, что «Не удалось установить контекст тока "(который, как мне кажется, был создан makeCurrent()), предшествует созданию« Виджета »... Любая идея о том, что не так, и как я мог отладить это?

Большое спасибо за ваше время и помощь!

+0

Запускаете ли вы исполняемый файл на собственной машине в режиме освобождения вне qtcreator? –

+0

Да, на самом деле я вообще не использую QtCreator, только Visual Studio 2013. Я попытался изменить имя папки Qt, чтобы сделать так, как если бы Qt не был установлен на моей машине, и он работает в режиме выпуска (я просто дважды щелкните exe) – Gpack

+0

Итак, вы запускаете приложение за пределами vs13, а затем не запускаете его через IDE? Вы можете проверить с помощью depency-walker, какую DLL будет использовать исполняемый файл. –

ответ

0

В конце концов, это была смесь проблем:

  1. opengl32.dll, что я использовал, казалось, на 64 бита в соответствии с зависимостью Уолкер (Что странно, что я взял его из C:/System32 /). Я загрузил новый для 32 бит, и он работал нормально. Спасибо, Себастьян Ланге.

  2. Вторая проблема, вероятно, исходит от графической карты второго устройства/OpenGL. Я пробовал на третьем компьютере, и теперь он работает нормально. Спасибо, ваханчо.

Надеюсь, это поможет будущим кодерам!