在 Win32Proj 中将 Qt 与 Visual Studio (C++) 集成

Posted

技术标签:

【中文标题】在 Win32Proj 中将 Qt 与 Visual Studio (C++) 集成【英文标题】:Integrating Qt with Visual Studio (C++) in Win32Proj 【发布时间】: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 解决了这个问题。

【问题讨论】:

【参考方案1】:

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

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

还有:

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

【讨论】:

以上是关于在 Win32Proj 中将 Qt 与 Visual Studio (C++) 集成的主要内容,如果未能解决你的问题,请参考以下文章

使用 win32com.client 模块在 Python 中将 .XLSX 转换为 .XLS

win10 下 protobuf 与 qt

如何在新的 bigquery 项目中将表复制到空数据集?

Qt & VS2013 报错:There's no Qt version assigned to this project for platform Win32

如何在c ++ win32 API中将图标添加到菜单项[重复]

如何在win32 api中将鼠标坐标写入文本文件?