0

我有一个 GUI 应用程序,它创建一个QProcess内部,捕获它的输出并将其显示在一个表单上。我需要以某种方式从表单中捕获关键事件以将它们传递给QProcess(以使其尽可能接近真实的终端窗口)。

所以,我想,我应该处理keyReleaseEvent()并以某种方式将event.text()(which is QString) 或event.key()(which is int) 转换为适用于process.write()(which take char*or QByteArray) 的参数。是否有一些推荐的方法来进行这种转换(考虑到本地化问题、ctrl/alt/shift 修饰符等)?我真的不想构建某种从key()返回值到char*字符串的映射;并text()掉落修饰符。

此外,如果我bash -c sudo something在 QProcess 中使用命令启动进程,它会立即退出,并抱怨“没有 tty 存在并且没有指定 askpass 程序”,所以我可能做错了什么......

4

1 回答 1

2

问题不仅仅是决定向进程写入什么内容。

您不能仅通过读取/写入进程的标准输出/标准输入来模拟终端,它比这更复杂。例如,考虑一下程序less或任何寻呼机。它如何知道一次打印多少行?它需要关于终端的信息,这些信息不是通过 stdin/stdout/stderr 表示的。

模拟终端超出了 QProcess 的范围。如果您确实确定需要这样做,那么请使用一些现有的基于 Qt 的终端仿真器作为起点(例如 Konsole)。

于 2009-12-05T12:49:19.843 回答