3

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

4

0 回答 0