【问题标题】:QProcess doesn't get finished signal from x-terminal-emulatorQProcess 没有从 x-terminal-emulator 获得完成的信号
【发布时间】:2014-05-05 09:35:42
【问题描述】:

我尝试使用 QProcess (Ubuntu) 运行 x-terminal-emulator

process->setWorkingDirectory(thedirectory);
process->start("x-terminal-emulator",arg3);
connect(process,SIGNAL(finished(int)),this,SLOT(deletecache()));

运行时,deletecache() 会在终端窗口打开后立即执行。
如果我将start 更改为execute,则不会发出已完成的信号。
终端窗口关闭时如何获取finished(int)信号?

【问题讨论】:

  • 不知道,但调用后连接是个坏主意。
  • 可能是因为x-terminal-emulator是运行真实终端进程并退出的脚本。
  • @PavelStrakhov:是的,没错,我能想到的唯一原因是真正可执行文件的独立脚本进程。 miraiE是这样吗?
  • 我认为 x-terminal-emulator 是 Linux 中的伪命令,可以在 KDE 中引用 Konsole,在 Gnome 中引用 gnome-terminal,XTerm 等等。

标签: qt ubuntu terminal


【解决方案1】:

运行时,deletecache() 会在终端窗口打开后立即执行。

我假设 arg3 指向 x-terminal-emulator 将运行的脚本。发生这种情况的唯一原因是,如果您的脚本在后台将外部程序的调用作为一个分离的进程,那么它在您关闭之前不会阻塞,而是会立即返回。

如果我更改开始执行,则不会发出完成信号。

这是意料之中的,因为 execute() 是一个静态方法,并且没有静态信号槽这样的概念。

终端窗口关闭时如何获取finished(int)信号?

不要将终端作为分离的后台进程运行。

【讨论】:

  • arg3 是一个 QStringList。我不知道 x-terminal-emulator 是否在单独的进程中运行。但我假设它链接到另一个程序并在调用时执行该程序。
  • 很抱歉我的回复迟了。它还没有解决,我暂时搁置它。谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-03-04
  • 1970-01-01
  • 1970-01-01
  • 2018-09-26
  • 1970-01-01
  • 1970-01-01
  • 2014-03-20
相关资源
最近更新 更多