Могу ли я использовать 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 делает все это очень замкнутым.

Другие вопросы по тегам