我正在开发一个 Qt 5.x 应用程序,其主要功能或多或少类似于(简化):
int main(int argc, char *argv[])
{
QApplication app(arg, argv);
QCommandLineParser cmdLineParser;
cmdLineParser.addHelpOption();
cmdLineParser.addVersionOption();
cmdLineParser.process(app);
/// *** SOME INITIALIZATION STUFF *** ///
app.exec();
}
当我在命令行上调用指定--version
(或--help
)选项的应用程序执行时遇到了一些问题:应用程序输出版本(或帮助),然后有时以分段错误终止......
我认为这是因为当检测到命令行(或)QCommandLineParser
上的内置选项时,只需调用's来终止执行,这会干扰我自己的(基本上一些其他线程已启动,并且可能过早调用原因一些问题)...--version
--help
QApplication
exit()
*** SOME INITIALIZATION STUFF ***
exit()
*** SOME INITIALIZATION STUFF ***
但是,我的问题是:如果在命令行上检测到内置选项,是否可以让 Qt 避免在我的应用程序中走得更远?换句话说,是否有一种方法可以调用来知道命令行解析器已检测到内置选项?否则:是否有一种方法可以知道exit()
已在应用程序上调用,因此应用程序正在终止?如果是这样,将我*** SOME INITIALIZATION STUFF ***
的if
条件包含在对该方法的争论中就足够了,这很好......
感谢您的支持。
>> 编辑 <<
我已经做了一些进一步的调查......行为似乎不依赖于我自己*** SOME INITIALIZATION STUFF ***
......事实上,即使是“最小、完整和可验证的示例”,因为以下示例有时会在触发可执行文件时以分段错误终止执行在--version
命令行上:
#include <QApplication>
#include <QCommandLineParser>
int main(int argc, char *argv[])
{
// Instantiate the application
QApplication app(argc, argv);
app.setApplicationVersion("1.0.0");
// Prepare for parsing the command line
QCommandLineParser cmdLineParser;
cmdLineParser.setApplicationDescription("Test application");
// Add support for command line standard options (help & version)
cmdLineParser.addHelpOption();
cmdLineParser.addVersionOption();
// Perform actual parsing of command line
cmdLineParser.process(app);
// Let the application run
return app.exec();
}
澄清一下,我在运行 Linux 操作系统的 ARM 设备上使用 Qt 5.3.2。