【问题标题】:Integrating Qt with Visual Studio (C++) in Win32Proj在 Win32Proj 中将 Qt 与 Visual Studio (C++) 集成
【发布时间】:2012-01-25 03:22:48
【问题描述】:

简短总结: 调用父 QWidget 构造函数时,我的 Qt 类在类构造部分崩溃。错误消息显示:“MyApplication.exe 中 0x0048fca9 处的第一次机会异常:0xC0000005:访问冲突读取位置 0x00000000。”

详情: 我正在做一个项目,为一个客户端添加一个覆盖用户界面,就像你在玩游戏时按“tab+shift”时的蒸汽一样。最初的应用程序是在 Visual Studio 环境中编写的,没有任何 UI 内容,因此我决定使用 Qt 来完成这项工作。

由于将项目转换为带有 .pro 文件的 Qt 项目非常复杂,因此我想基本上将 Qt 用作另一个库(包括 lib 和 include 文件夹并在项目中使用它)。

当我用 C 语言编写它时它工作得很好。菜单显示,但它根本不可点击。似乎为了使 Qt 事件循环工作,我必须将我的自定义小部件声明为一个类而不是一组 C 函数。

我将我的Qt类添加到项目中,修改include和lib文件夹,生成Moc文件,将其包含在项目中。一切都会编译,但是当我运行程序时,它会显示错误消息。跟踪代码显示构造函数在尝试构造QWidget时失败。

我在网上搜索过,但大多数教程都告诉你如何在 Qt Creator 或 Visual Studio Addin 中从头开始工作。

感谢 Smi 解决:

问题是我初始化 QApplication 晚于 QWidget 初始化。在调用构造函数之前添加 QApplication 解决了这个问题。

【问题讨论】:

    标签: visual-studio qt user-interface


    【解决方案1】:

    QWidget 构造函数失败的一个可能原因是您忘记初始化QApplication 对象。 Qt documentation 说:

    对于任何使用 Qt 的 GUI 应用程序,只有一个 QApplication 对象,无论该应用程序在任何给定时间是否有 0、1、2 个或更多窗口。

    还有:

    由于 QApplication 对象进行了如此多的初始化,它必须在创建与用户界面相关的任何其他对象之前创建。

    【讨论】:

      猜你喜欢
      • 2011-07-28
      • 1970-01-01
      • 1970-01-01
      • 2013-01-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-15
      • 1970-01-01
      相关资源
      最近更新 更多