如何将QCommandLineParser的实例传递给Qt中的函数?

时间:2019-04-23 17:31:50

标签: qt configuration qt5 qcommandlineparser

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

在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);
    ...

但是,出现此错误(链接中): Compilation error

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

parser.process(app)

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

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

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

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

1 个答案:

答案 0 :(得分:0)

好吧,经过摸索之后,我找到了解决方案。 在ExecuteTask.h中:

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

在ExecuteTask.cpp中:

    ExecuteTask cmnd_line_func;
    QCommandLineParser parser;

    cmnd_line_func.setUp(&parser);

    parser.process(app);

在main.cpp中:

{{1}}