QCommandLineParser:如果处理了内置选项,则暂停执行

时间:2017-03-09 10:53:59

标签: c++ qt qt5 qcommandlineparser

我正在开发一个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。

0 个答案:

没有答案