使用 qprocess 在 linux 中运行外部应用程序
Posted
技术标签:
【中文标题】使用 qprocess 在 linux 中运行外部应用程序【英文标题】:run external application in linux using qprocess 【发布时间】:2019-05-28 05:09:05 【问题描述】:我正在使用 Raspbian 中的 QT 创建器创建一个 GUI 应用程序。当我点击一个按钮时,我想打开一个外部应用程序,如终端或浏览器等。
我尝试了很多次
尝试 1std::system("/usr/share/raspi-ui-overrides/applications/scratch.desktop&");
它说我的权限被拒绝
尝试 2QDesktopServices::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 中运行外部应用程序的主要内容,如果未能解决你的问题,请参考以下文章
如何确定在 Linux 上使用 Qt4 终止 QProcess 的信号?
linux下QT中如何使用QProcess运行linux命令。