Как мне передать экземпляр QCommandLineParser функции в Qt?

#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);