使用qprocess在linux中运行外部应用程序

时间:2019-05-28 05:09:05

标签: linux qt raspberry-pi raspbian

我正在使用Raspbian中的QT创建器创建GUI应用程序。当我单击一个按钮时,我想打开一个外部应用程序,例如终端或浏览器等。

我尝试了很多次

  • 尝试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 个答案:

答案 0 :(得分:1)

我假设问题是关于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

答案 1 :(得分:1)

.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");