【发布时间】:2021-07-19 20:36:18
【问题描述】:
我在 Visual Studio 中有一个简单的 Qt 应用程序:
int main(int argc, char* argv[]){
QApplication app(argc, argv);
Myclass* c = new MyClass;
c->show();
int ret = app.exec();
return ret;
}
但是当我关闭窗口时我的应用程序没有返回(在调试模式下,app.exec() 没有返回)。 Qt Qtwebengineprocessd 进程和子进程仍在执行中。
如何在 Visual Studio 中控制/调试我的应用程序被阻止的原因/位置?
【问题讨论】:
-
MyClass不是 Qt 提供的类,因此在不知道MyClass是如何实现的情况下,无法判断其中是否存在错误。除此之外,您显示的代码将无法编译:Myclass*和new MyClass不匹配。发布代码时,请发布 minimal reproducible example 的实际副本和过去,否则,我们无法确定什么是拼写错误,什么是错误。 -
MyClass,是我的类定义。但我问过 Visual Studio 中是否有办法调试/控制我的应用程序被阻止的位置?
-
理论上你可以在 Qt 代码中(在它的事件循环中)设置一些断点来查看它为什么仍然处于活动状态。哪里取决于您使用的 qt 的实际版本。但是了解 Qt 的内部结构并不是那么容易。问题可能出在您的
MyClass实现中,因此您将检查其代码是否在逻辑上正确,而不是使用断点。 -
我的班级在 Marble kde 的实现中,大量使用了 Qt。我必须控制是否正确调用 Marble 析构函数。目前我使用 Qt 5.13。谢谢。
-
我也有这个问题,当我运行时没问题,但是当我使用 debug 时,我的程序在
(app.exec())的那一行崩溃了,并没有告诉我为什么会这样。