我正在开发一个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
在命令行(--version
或--help
)上检测到内置选项时,只需调用QApplication
&#39 ; s exit()
用于终止执行,这会干扰我自己的*** SOME INITIALIZATION STUFF ***
(基本上一些其他线程已启动,可能过早调用exit()
会导致一些问题)......
但是,我的问题是:如果在命令行上检测到内置选项,是否有可能让Qt避免在我的*** SOME INITIALIZATION STUFF ***
中更进一步?换句话说,是否有一种方法需要知道命令行解析器检测到内置选项?否则:是否有一种方法可以知道应用程序已调用exit()
,因此应用程序正在终止?如果是这样,只需将我的*** SOME INITIALIZATION STUFF ***
括在if
条件中就该方法进行论证就足够了......
感谢您的支持。
>>编辑<<
我已经做了一些进一步的调查......这种行为似乎不依赖于我自己的*** SOME INITIALIZATION STUFF ***
......实际上甚至是一个&#34; 最小,完整和可验证的例子< / EM>&#34;当在命令行上使用--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 OS的ARM设备上使用Qt 5.3.2。