我有一个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程序”,所以我可能做了一些完全错误的事情......
答案 0 :(得分:2)
问题不只是决定写入流程的内容。
你不能仅通过读/写一个进程的stdout / stdin来模拟终端,它比这更复杂。例如,考虑一下程序less
或任何寻呼机。它如何知道一次打印多少行?它需要有关未通过stdin / stdout / stderr表示的终端的信息。
模拟终端超出了QProcess的范围。如果您确实需要这样做,那么请使用一些现有的基于Qt的终端仿真器作为起点(例如Konsole)。