目前我有一个有效的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);
...
但是,我收到此错误(附在链接中):Compilation error
我也尝试将QCommandLineParser解析器声明为ExecuteTask.h中的指针,但显然当你必须运行时会导致问题:
parser.process(app)
在主要。我已经尝试过将QCoreApplication app
传递给我的setUp函数以在我的parser.process(app)
方法中运行setUp()
,但这带来了类似的“......在此上下文中是私有的”。
还尝试了另一种解决方案,其中将QCommandLineParser parser
声明为指针并使用getParser()
方法返回main中的解析器但这会导致类似的“私有”问题。
- 不知道从哪里开始,因为我习惯了C ++,只是将argc和argv传递给方法,但这与Qt不同。
那么有没有一种方法可以将QCommandLineParser传递给main()之外的方法?文档对我没什么帮助,而且我遇到的每个教程都在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中:
ExecuteTask cmnd_line_func;
QCommandLineParser parser;
cmnd_line_func.setUp(&parser);
parser.process(app);