将keyboad事件透明地传递给QProcess的推荐方法是什么?

时间:2009-12-05 05:59:41

标签: c++ qt qprocess

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

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

此外,如果我在QProcess中使用命令bash -c sudo something开始处理,它立即退出,抱怨“没有tty存在且没有指定askpass程序”,所以我可能做了一些完全错误的事情......

1 个答案:

答案 0 :(得分:2)

问题不只是决定写入流程的内容。

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

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