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

Posted

技术标签:

【中文标题】使用 qprocess 在 linux 中运行外部应用程序【英文标题】:run external application in linux using qprocess 【发布时间】:2019-05-28 05:09:05 【问题描述】:

我正在使用 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"));

【问题讨论】:

显示scratch.desktop的内容 你能从终端执行/usr/share/raspi-ui-overrides/applications/scratch.desktop&吗? 【参考方案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。查看*.desktop 文件中的Exec= 行以查看可执行文件的名称,然后在终端中使用which 查看其位置:

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

【讨论】:

您好,我已经尝试使用此路径 /usr/bin/scratch 仍然无法打开应用程序 在终端运行/usr/bin/scratch是否有效? 另外,这不是QDesktopServices::openUrl,更可能是@eyllanesc 建议的QProcess::execute @MohdViquar 使用 QProcess::startDetached("/usr/bin/scratch"); 嗨,是的,当我在 qprocess::execute 命令上使用 /usr/bin/scratch 时它的工作如何找到其他应用程序的位置?谢谢【参考方案2】:

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

【讨论】:

以上是关于使用 qprocess 在 linux 中运行外部应用程序的主要内容,如果未能解决你的问题,请参考以下文章

使用 QProcess 调用带有参数的外部程序

如何确定在 Linux 上使用 Qt4 终止 QProcess 的信号?

linux下QT中如何使用QProcess运行linux命令。

如何使用 QProcess 运行 vim 终端

如何在不冻结 gui 的情况下运行 QProcess 的同步链?

Qt QProcess启动和关闭外部程序