запустить внешнее приложение в Linux с помощью qprocess - PullRequest
1 голос
/ 28 мая 2019

Я создаю приложение с графическим интерфейсом, используя QT Creater на Raspbian.Когда я нажимаю кнопку, я хочу открыть внешнее приложение, такое как терминал, браузер и т. Д.

Я пробовал много попыток

  • попытка 1
std::system("/usr/share/raspi-ui-overrides/applications/scratch.desktop&");

он говорит, что мне отказано в разрешении

  • попытка 2
QDesktopServices::openUrl(QUrl("/usr/share/raspi-ui-overrides/applications/scratch.desktop"));
  • это работает, но не открывает приложение, а открывает в терминале:
QDesktopServices::openUrl(QUrl("/usr/share/raspi-ui-overrides/applications/scratch.desktop"));

Ответы [ 2 ]

1 голос
/ 28 мая 2019

Файлы .desktop не являются исполняемыми, но служат ярлыками для настольной системы. Предполагая, что scratch.desktop имеет следующее:

scratch.desktop

[Desktop Entry]
Name=Scratch
Comment= Programming system and content development tool
Exec=scratch
Terminal=false
Type=Application
Icon=scratch
Categories=Development;
MimeType=application/x-scratch-project

Тогда исполняемый файл - /usr/bin/scratch, и вы можете запустить его с помощью Qt:

QProcess::startDetached("/usr/bin/scratch");

Или:

QProcess::execute("/usr/bin/scratch");
1 голос
/ 28 мая 2019

Я предполагаю, что вопрос касается Raspberry Pi и Raspbian.

В Raspbian файлы scratch.desktop и другие *.desktop не являются исполняемыми файлами, а представляют собой просто текстовые файлы, описывающие, какое приложение следует запускать.

Пример:

pi@raspberrypi:~ $ cat /usr/share/raspi-ui-overrides/applications/scratch.desktop 
[Desktop Entry]
Encoding=UTF-8
Version=1.0
Type=Application
TryExec=scratch
Exec=scratch
Icon=scratch
Terminal=false
Name=Scratch
Comment= Programming system and content development tool
Categories=Application;Development;
MimeType=application/x-scratch-project

Для запуска процесса необходимо использовать фактический двоичный файл.Для scratch это будет /usr/bin/scratch.Для браузера это, вероятно, будет /usr/bin/epiphany-browser.Посмотрите на строку Exec= в файле *.desktop, чтобы увидеть имя исполняемого файла, затем используйте which в терминале, чтобы увидеть его местоположение:

pi@raspberrypi:~ $ which epiphany-browser 
/usr/bin/epiphany-browser
...