23

如何在运行时从 QObject 中检测它链接的 Qt 是调试版本还是发布版本?

我知道QT_NO_DEBUG 宏,但这在 Qt 的构建时已解决。

何时有用的示例 1:我有一个充当崩溃处理程序的插件,提供回溯。如果 qt 调试符号可用,我只希望这个插件尝试完成所有这些工作。

示例 2:我有一个用 pyqt 编写的命令行参数解析器。它想打印程序帮助。它如何从 pyqt 中确定 QApplication 是否支持 -sync 开关。如果我有关于构建类型的信息,我可以轻松地从程序理解的参数列表中添加或删除 -sync。

4

2 回答 2

48

如果您只想测试您是在运行应用程序的调试版本还是发布版本,请使用QT_DEBUG

#ifdef QT_DEBUG
  qDebug() << "Running a debug build";
#else
  qDebug() << "Running a release build";
#endif

尽管这显然使用了预处理器,而不是在运行时检查。对于您为什么指定要在运行时进行此检查,我有点困惑,因为只能在编译之前做出是否使用调试功能进行构建的决定...

我不知道在 Qt4 中有任何简单的方法来检查您链接的 Qt 库是否已在启用调试的情况下构建(尽管我确实注意到这在 Qt5 中看起来会随着添加QLibraryInfo::isDebugBuild().

于 2012-07-30T14:44:05.730 回答
2

接受的答案中的两个提示都是正确的。在 macOS 上使用 Qt5有一个副作用。默认情况下,框架使用其库的发布版本,并且此方法的结果将始终为“假”值。

于 2018-03-11T15:39:57.943 回答