0

目前我有一个工作的 Qt 命令行应用程序。但是,我需要重构这个工作程序,以便我的 QCommandLineParser 对象在类方法中而不是在 main() 本身中配置。我已经尝试了明显的:

在 ExecuteTask.h 中:

void setUp(QCommandLineParser parser);

在 ExecuteTask.cpp 中:

void ExecuteTask::setUp(QCommandLineParser parser){
    parser.setApplicationDescription("Learning console app in Qt");
    parser.addHelpOption();
}

在 main.cpp 中:

    ...
    QCoreApplication app(argc, argv);
    ExecuteTask cmnd_line_func;
    QCommandLineParser parser;
    cmnd_line_func.setUp(parser);
    ...

但是,我收到此错误(附加在链接中): 编译错误

我还尝试将 QCommandLineParser 解析器声明为 ExecuteTask.h 中的指针,但显然这会在您必须运行时导致问题:

parser.process(app)

主要。我实际上也尝试过传递QCoreApplication app给我的 setUp 函数以parser.process(app)在我的setUp()方法中运行,但这带来了类似的“......在此上下文中是私有的”。

还尝试了另一种解决方案,其中声明QCommandLineParser parser为指针并使用getParser()方法在 main 中返回解析器,但这会导致类似的“私有”问题。

-- 不知道从哪里开始,因为我习惯了 C++,只是将 argc 和 argv 传递给方法,但这与 Qt 不同。

那么有没有一种方法可以将 QCommandLineParser 传递给 main() 之外的方法?文档对我帮助不大,几乎我遇到的每个教程都在 main() 中完成了所有配置,这根本不是我想做的。

4

1 回答 1

0

好的,经过一番折腾,我找到了解决方案。在 ExecuteTask.h 中:

void setUp(QCommandLineParser *parser);

在 ExecuteTask.cpp 中:

void ExecuteTask::setUp(QCommandLineParser *parser){
    parser->setApplicationDescription("Learning console app in Qt");
    parser->addHelpOption();
}

在 main.cpp 中:

    ExecuteTask cmnd_line_func;
    QCommandLineParser parser;

    cmnd_line_func.setUp(&parser);

    parser.process(app);
于 2019-04-23T18:09:56.017 回答