#qt #configuration #qt5 #qcommandlineparser
#qt #конфигурация #qt5 #qcommandlineparser
Вопрос:
В настоящее время у меня есть работающее приложение командной строки 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)
в main. На самом деле я попытался также передать QCoreApplication app
моей функции настройки для запуска parser.process(app)
в моем setUp()
методе, но это привело к появлению аналогичного «… является закрытым в этом контексте».
Также попробовал другое решение, где объявляется QCommandLineParser parser
как указатель и используется getParser()
метод для возврата синтаксического анализатора в main, но это приводит к аналогичным «частным» проблемам.
— понятия не имею, куда идти дальше, поскольку я привык к C и просто передаю argc и argv в методы, но это с Qt отличается.
Итак, есть ли способ, которым QCommandLineParser может быть передан методу вне main()? Документы мне не очень помогли, и почти в каждом руководстве, с которым я сталкивался, вся настройка выполняется в main(), а это совсем не то, что я хочу делать.
Ответ №1:
Хорошо, покопавшись, я нашел решение. в 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(amp;parser);
parser.process(app);