Qt5Widgets.dll+Qt5Core.dll处有未经处理的异常andQStringList

博客主要讲述了Qt程序运行中出现的问题及解决办法。包括建立通信后异常退出,原因是Label链接错误;下达动力悬停任务后异常退出,是因未在QStringList添加相关任务;MessageBox显示中文信息乱码,可使用QString::fromLocal8Bit解决。
出现了一个问题,导致程序停止正常工作。Qt5Widgets.dll处有未经处理的异常+Qt5Core.dll处有未经处理的异常。

问题1:程序运行,建立通信后,程序会异常退出;

解决1:Label链接错误,程序更新无法找到相关Label,导致异常退出。

问题2:程序运行正常,在下达动力悬停任务后,程序异常退出;

解决2:新增“动力悬停”任务,未在QStringList进行添加,导致接收下位机指令反馈时,在modeString中找不到相应的列表索引,导致异常退出。

问题3:MessageBox显示QStringList中的中文信息乱码;

解决3:QString::fromLocal8Bit(“动力悬停”)。

Qt扫盲-QStringList字符串列表总结-优快云博客

const QStringList modeString = 
在使用 Qt5.15.2 进行开发时,若遇到 `QWidget: Must construct a QApplication before a QWidget` 错误提示,并且错误信息指向 `qwidget.cpp` 第 191 行,这通常表明在创建任何 `QWidget` 派生类的实例之前,未正确构造 `QApplication` 实例。 此类错误在调试版本(Debug)中更容易触发,尤其是在链接了不匹配的库版本(如 Debug 模式下使用了 Release 版本的库)时[^1]。以下是排查和解决该问题的几个关键方向: ### 1. 确保 QApplication 在 main 函数中正确构造 Qt 应用程序必须在创建任何 GUI 相关对象(如 `QWidget`、`QWindow` 等)之前构造 `QApplication` 实例。典型的 `main()` 函数结构如下: ```cpp #include <QApplication> #include "widget.h" int main(int argc, char *argv[]) { QApplication app(argc, argv); // 必须放在所有 GUI 对象创建之前 Widget widget; widget.show(); return app.exec(); } ``` 如果 `QApplication` 的构造晚于任何 `QWidget` 子类的实例化,就会触发该错误[^2]。 ### 2. 检查是否在静态变量或全局变量中创建了 QWidget 对象 有时错误并非出现在 `main()` 函数中,而是在静态或全局对象的构造函数中创建了 `QWidget` 或其派生类实例。例如: ```cpp // global.h extern Widget globalWidget; // global.cpp Widget globalWidget; // 错误:在 QApplication 构造前创建了 QWidget 实例 ``` 这种写法会导致程序在进入 `main()` 之前就尝试构造 `QWidget` 实例,此时 `QApplication` 尚未初始化,从而触发运行时错误。 ### 3. 检查是否链接了不匹配的 Qt 库版本 如引用中所述,若在 Debug 模式下链接了 Release 版本的库(如 `.lib` 或 `.dll`),虽然编译阶段不会报错,但在运行时可能会出现难以预料的错误,包括此提示。请确保: - Debug 模式下链接 Debug 版本的 Qt 库 - Release 模式下链接 Release 版本的 Qt 库 - 若使用自定义控件或插件,也应分别编译并链接对应的 Debug/Release 版本 ### 4. 使用 Qt Creator 的构建配置检查 在 Qt Creator 中,可以通过以下方式检查当前构建配置和库链接情况: - 打开项目设置(Projects) - 查看当前构建套件(Kit)是否为 Debug 或 Release - 查看构建步骤中的 qmake 参数是否正确(如 `CONFIG += debug` 或 `CONFIG += release`) ### 5. 使用调试器定位问题源头 若上述方法未能定位问题,可使用调试器(如 GDB 或 Visual Studio Debugger)在 `qwidget.cpp` 的第 191 行设置断点,查看调用栈以确定是哪个 `QWidget` 的子类在 `QApplication` 初始化之前被构造。 ---
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值