c++ - QT 应用程序在启动时崩溃 (c++ windows)

标签 c++ qt crash

我有一个 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

最佳答案

我自己的 QT 应用程序使用带有 OpenGL 的 Qt 4.8.3 时遇到了同样的问题。

我发现崩溃是由于使用了 OpenGL 绘图引擎。如果 OpenGL 驱动程序报告它支持 OpenGL 2.0,则引擎类型应自动设置为 OnegGL2。在我看来,这似乎是失败的。

为了解决这个问题,我在构建我的 QT 应用程序之前通过添加以下代码来设置 OpenGL 首选绘制引擎:

QGL::setPreferredPaintEngine(QPaintEngine::OpenGL);

关于c++ - QT 应用程序在启动时崩溃 (c++ windows),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16723580/

相关文章:

c++ - C++11 的垃圾收集 ABI 有实际用途吗?

C++ 无效的操作数和类型

c++ - 在 boost::compute 中分配大 vector

c++ - Qt - QStringList 到 QByteArray

c++ - 如何将静态常量变量保留为类的成员

c++ - 我可以通过操纵内存来使非常罕见的崩溃更有可能发生吗?

c++ - 尝试使用 glDrawArraysInstanced() 时 OpenGL 崩溃

python - 如何实现 C++ api 到 Python 的通用适配器(如 Boost.Python 那样)?

c++ - 管道标准输出到 Qt 4.7 中的 QLabel

crash - Direct3D11取得最后错误