Могу ли я использовать QApplication AND QCoreApplication?
У меня есть консольное приложение, использующее QCoreApplication в Qt5. Это приложение имеет различные функции, такие как "printABC" или "printSUV". Выход появится в терминале. Теперь я хочу создать графический интерфейс, на котором я могу нажимать кнопки "printABC" или "printSUV", и вывод также будет отображаться в терминале, так что приложение будет "проще". В Qt5 я могу создать консольное приложение, используя QCoreApplication, что я уже сделал. Итак, мой вопрос, как я могу добавить приложение QApplication, которое выполняется по пути? В документах рекомендуется создать QApplication / QCoreApplication в главной функции, так как я могу создать оба?
1 ответ
Вы можете легко иметь одно приложение, которое поддерживает как режим командной строки (терминала), так и режим графического интерфейса пользователя. Просто используйте QApplication
(или же QGuiApplication
только для приложения QML).
Затем, например, если пользователь передает параметры CLI, вы просто запускаете функцию (и) и отправляете результат sdtout
(предположительно, как вы делаете сейчас). В противном случае покажите графический интерфейс и используйте те же функции, но для отображения данных другим способом (в пользовательском интерфейсе).
Если вы еще этого не сделали, вы можете заглянуть в QCommandLineParser, чтобы помочь обработать параметры CLI. Просто имейте в виду, что он работает точно так же с Q[Gui]Application
также.
В main()
сначала обработайте все параметры CLI. Тогда, чтобы НЕ запускать графический интерфейс, вы просто exit(0)
от main()
перед звонком app.exec()
,
РЕДАКТИРОВАТЬ: Если вы хотите показать вывод в консоли, с которой было запущено приложение, то вы все равно можете просто напечатать на stdout
(или что ты сейчас делаешь). Однако, если вы хотите, чтобы это работало в Windows, могут потребоваться дополнительные шаги... и есть несколько вещей, которые следует учитывать. Я думаю, что это действительно тема другого вопроса. ИМХО смешивание двух (GUI в одном окне и вывод в консоли) может быть довольно неловким, а отображение вывода в GUI делает все это очень замкнутым.