Приложение QT запускает другое приложение в OSX

В настоящее время я разрабатываю агент «Agent.app», который должен сканировать ваш USB-порт, и если он обнаруживает USB-устройство, приложение запускает приложение под названием «Filebrowser.app».

Я хочу, чтобы Agent.app находился внутри Filebrowser.app, чтобы избежать нескольких приложений.

Мое первое приложение FileBrowser разработано на Qt / c ++ под QT Creator. Я также разработал Agent.app под Qt Creator, но это просто класс C ++, не имеющий отношения к Qt.

Я думаю, что мне нужно, чтобы agent.pri был объявлен внутри FileBrowser.pri, чтобы убедиться, что FileBrowser.app будет включать его.

Что я сделал в агенте:

int main()
{
PulsUsbDetection *MyUSBDevice = new PulsUsbDetection;

if(MyUSBDevice->isPulsConnected() == true) {
char *filepath = "/Applications/puls_connect.app";
string command = "open " + filepath;
system(command.c_str());
}

return 0;
}

Это худшее, что я могу сделать в основном, если приложение отсутствует в Application.app.

У меня есть 2 вопроса:

  • Как разрешить agent.app запускать FileBrowser.app, когда агент находится внутри FileBrowser.app?
  • Как убедиться, что agent.app будет включен в FileBrowser.app?

большое спасибо

1

Решение

Я хочу, чтобы Agent.app находился внутри Filebrowser.app, чтобы избежать нескольких приложений.

Рассматривали ли вы наличие только одной программы, которая включает в себя функциональность обоих приложений и выбирает (внутри main ()), какую функциональность выполнять, например, на основании: аргумент командной строки? Это будет легче реализовать, а также сделает ваш установочный пакет намного меньше. Это сказал …

Как убедиться, что agent.app будет включен в FileBrowser.app?

После компиляции обеих программ переместите папку agent.app в папку FileBrowser.app/Contents/Resources. Для этого можно использовать команду оболочки или сценарий bash или просто щелкнуть правой кнопкой мыши значок FileBrowser.app, выбрать в меню «Открыть пакет», а затем открыть подпапки «Содержимое и ресурсы» и перетащить agent.app в ,

Как разрешить agent.app запускать FileBrowser.app, когда агент
находится внутри FileBrowser.app?

Первое, что вы захотите сделать, это найти путь к каталогу, в котором находится исполняемый файл вашего «агента». К счастью, в Qt есть метод для этого: вы можете просто вызвать QApplication :: applicationDirPath ().

Так, например, если ваш FileBrowser.app был помещен в / Applications, а agent.app был помещен в FileBrowser.app/Contents/Resources (как предложено выше), то приведенный выше вызов функции вернет строку типа «/ Applications / FileBrowser.app/Contents/Resources/agent.app/Contents/MacOS».

Вторым шагом будет получение из этой строки пути к вашему приложению FileBrowser. Это должно быть просто сделать:

// This code to be run in the agent app, to launch the FileBrowser app...
QString agentExecutableDirPath = QApplication::applicationDirPath();
QString fileBrowserExecutablePath = agentExecutableDirPath + "../../../../MacOS/FileBrowser";
system(QFile::encodeName(fileBrowserExecutablePath).constData());  // run it

Обратите внимание, что вы, вероятно, получите более приятное поведение при запуске процесса FileBrowser с использованием Qt QProcess API, чем при вызове system () — в частности, вызов system () не будет возвращаться до тех пор, пока не завершится процесс FileBrowser, что будет иметь побочный эффект замораживания графического интерфейса вашего агента до тех пор.

0

Другие решения


По вопросам рекламы [email protected]