1

私は、もう私の会社にいない他の誰かによって書かれたソースコード fa qt アプリケーションを持っています。

qt 4.8.4 を使用してコードをコンパイルすることができました。元のバージョンでは qt 4.7.3 が使用されていることがわかりました。

アプリケーションを実行すると、起動直後に qt DLL 内でクラッシュします。

windows7 x64で開発していますが、ターゲットはx86です。私はVS 2012を使用しており、VS 2012を使用してqtをコンパイルしています。

QT が正しく動作するために何か環境変数を設定する必要がありますか?

他のソフトウェア (opengl や qt が中継する他のライブラリなど) をインストールする必要がありますか?

編集 1

クラッシュ後のスタックは次のとおりです。

QtOpenGLd4.dll!QGLContextPrivate::extensionFuncs(const QGLContext * ctx) Line 467   C++
    QtOpenGLd4.dll!qt_resolve_glsl_extensions(QGLContext * ctx) Line 257    C++
    QtOpenGLd4.dll!QGLShaderPrivate::create() Line 227  C++
    QtOpenGLd4.dll!QGLShader::QGLShader(QFlags<enum QGLShader::ShaderTypeBit> type, const QGLContext * context, QObject * parent) Line 342  C++
    QtOpenGLd4.dll!QGLEngineSharedShaders::QGLEngineSharedShaders(const QGLContext * context) Line 191  C++
    QtOpenGLd4.dll!QGLContextGroupResource<QGLEngineSharedShaders>::value(const QGLContext * context) Line 777  C++
    QtOpenGLd4.dll!QGLShaderStorage::shadersForThread(const QGLContext * context) Line 63   C++
    QtOpenGLd4.dll!QGLEngineSharedShaders::shadersForContext(const QGLContext * context) Line 74    C++
    QtOpenGLd4.dll!QGLEngineShaderManager::QGLEngineShaderManager(QGLContext * context) Line 467    C++
    QtOpenGLd4.dll!QGL2PaintEngineEx::begin(QPaintDevice * pdev) Line 2150  C++
    QtGuid4.dll!QPainter::begin(QPaintDevice * pd) Line 1881    C++
    QtGuid4.dll!QPainter::QPainter(QPaintDevice * pd) Line 1508 C++
    myapp.exe!SViewer::paintEvent(QPaintEvent * __formal) Line 187  C++
    QtGuid4.dll!QWidget::event(QEvent * event) Line 8533    C++
    QtOpenGLd4.dll!QGLWidget::event(QEvent * e) Line 4408   C++
    QtGuid4.dll!QApplicationPrivate::notify_helper(QObject * receiver, QEvent * e) Line 4562    C++
    QtGuid4.dll!QApplication::notify(QObject * receiver, QEvent * e) Line 4527  C++
    QtCored4.dll!QCoreApplication::notifyInternal(QObject * receiver, QEvent * event) Line 946  C++
    QtCored4.dll!QCoreApplication::sendSpontaneousEvent(QObject * receiver, QEvent * event) Line 234    C++
    QtGuid4.dll!QWidgetPrivate::drawWidget(QPaintDevice * pdev, const QRegion & rgn, const QPoint & offset, int flags, QPainter * sharedPainter, QWidgetBackingStore * backingStore) Line 5598  C++
    QtGuid4.dll!QWidgetPrivate::repaint_sys(const QRegion & rgn) Line 1659  C++
    QtGuid4.dll!QWidgetPrivate::syncBackingStore() Line 1894    C++
    QtGuid4.dll!QWidget::event(QEvent * event) Line 8680    C++
    QtOpenGLd4.dll!QGLWidget::event(QEvent * e) Line 4408   C++
    QtGuid4.dll!QApplicationPrivate::notify_helper(QObject * receiver, QEvent * e) Line 4562    C++
    QtGuid4.dll!QApplication::notify(QObject * receiver, QEvent * e) Line 4527  C++
    QtCored4.dll!QCoreApplication::notifyInternal(QObject * receiver, QEvent * event) Line 946  C++
    QtCored4.dll!QCoreApplication::sendEvent(QObject * receiver, QEvent * event) Line 231   C++
    QtCored4.dll!QCoreApplicationPrivate::sendPostedEvents(QObject * receiver, int event_type, QThreadData * data) Line 1570    C++
    QtCored4.dll!qt_internal_proc(HWND__ * hwnd, unsigned int message, unsigned int wp, long lp) Line 496   C++
    user32.dll!75ce62fa()   Unknown
    [Frames below may be incorrect and/or missing, no symbols loaded for user32.dll]    
    user32.dll!75ce6d3a()   Unknown
    user32.dll!75ce6ce9()   Unknown
    user32.dll!75ce77c4()   Unknown
    user32.dll!75ce788a()   Unknown
    QtCored4.dll!QEventDispatcherWin32::processEvents(QFlags<enum QEventLoop::ProcessEventsFlag> flags) Line 810    C++
    QtGuid4.dll!QGuiEventDispatcherWin32::processEvents(QFlags<enum QEventLoop::ProcessEventsFlag> flags) Line 1204 C++
    QtCored4.dll!QEventLoop::processEvents(QFlags<enum QEventLoop::ProcessEventsFlag> flags) Line 150   C++
    QtCored4.dll!QEventLoop::exec(QFlags<enum QEventLoop::ProcessEventsFlag> flags) Line 204    C++
    QtGuid4.dll!QDialog::exec() Line 555    C++
    myapp.exe!MainWindow::actionWelcomeDialog() Line 1078   C++
    myapp.exe!MainWindow::qt_static_metacall(QObject * _o, QMetaObject::Call _c, int _id, void * * _a) Line 92  C++
    QtCored4.dll!QMetaCallEvent::placeMetaCall(QObject * object) Line 524   C++
    QtCored4.dll!QObject::event(QEvent * e) Line 1194   C++
    QtGuid4.dll!QWidget::event(QEvent * event) Line 8845    C++
    QtGuid4.dll!QMainWindow::event(QEvent * event) Line 1479    C++
    QtGuid4.dll!QApplicationPrivate::notify_helper(QObject * receiver, QEvent * e) Line 4562    C++
    QtGuid4.dll!QApplication::notify(QObject * receiver, QEvent * e) Line 4527  C++
    QtCored4.dll!QCoreApplication::notifyInternal(QObject * receiver, QEvent * event) Line 946  C++
    QtCored4.dll!QCoreApplication::sendEvent(QObject * receiver, QEvent * event) Line 231   C++
    QtCored4.dll!QCoreApplicationPrivate::sendPostedEvents(QObject * receiver, int event_type, QThreadData * data) Line 1570    C++
    QtCored4.dll!qt_internal_proc(HWND__ * hwnd, unsigned int message, unsigned int wp, long lp) Line 496   C++
    user32.dll!75ce62fa()   Unknown
    user32.dll!75ce6d3a()   Unknown
    user32.dll!75ce6ce9()   Unknown
    user32.dll!75ce77c4()   Unknown
    user32.dll!75ce788a()   Unknown
    QtCored4.dll!QEventDispatcherWin32::processEvents(QFlags<enum QEventLoop::ProcessEventsFlag> flags) Line 810    C++
    QtGuid4.dll!QGuiEventDispatcherWin32::processEvents(QFlags<enum QEventLoop::ProcessEventsFlag> flags) Line 1204 C++
    QtCored4.dll!QEventLoop::processEvents(QFlags<enum QEventLoop::ProcessEventsFlag> flags) Line 150   C++
    QtCored4.dll!QEventLoop::exec(QFlags<enum QEventLoop::ProcessEventsFlag> flags) Line 204    C++
    QtCored4.dll!QCoreApplication::exec() Line 1218 C++
    QtGuid4.dll!QApplication::exec() Line 3824  C++
    myapp.exe!main(int argc, char * * argv) Line 26 C++
    myapp.exe!WinMain(HINSTANCE__ * instance, HINSTANCE__ * prevInstance, char * __formal, int cmdShow) Line 131    C++
    myapp.exe!__tmainCRTStartup() Line 528  C
    myapp.exe!WinMainCRTStartup() Line 377  C
    kernel32.dll!758333aa() Unknown
    ntdll.dll!77d59ef2()    Unknown
    ntdll.dll!77d59ec5()    Unknown
4

2 に答える 2

1

OpenGLでQt 4.8.3を使用している自分のQTアプリケーションでも同じ問題がありました。

クラッシュの原因は、OpenGL ペイント エンジンを使用していることが原因であることがわかりました。OpenGL ドライバーが OpenGL 2.0 をサポートしていると報告した場合、エンジンの種類は自動的に OnegGL2 に設定されます。私の場合、これは失敗しているようです。

この問題を解決するために、QT アプリケーションを構築する前に次のコードを追加して、OpenGL 優先ペイント エンジンを設定しました。

QGL::setPreferredPaintEngine(QPaintEngine::OpenGL);
于 2016-03-02T07:00:00.787 に答える