代码之家  ›  专栏  ›  技术社区  ›  fjarri

将keyboad事件透明地传递给qprocess的建议方法是什么?

  •  0
  • fjarri  · 技术社区  · 15 年前

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

    所以,我想,我应该处理 keyReleaseEvent() 并且以某种方式转换 event.text() (这是 QString event.key() (这是 int )争论,适合 process.write() (这需要 char* QByteArray )是否有一些建议的方法来进行这种转换(考虑到本地化问题、ctrl/alt/shift修饰符等)?我真的不想从 key() 将值返回到 烧焦* 字符串;以及 text() 删除修改器。

    此外,如果我用命令启动进程 bash -c sudo something 在qprocess中,它立即退出,抱怨“没有tty存在,也没有指定askpass程序”,所以我可能做了一些完全错误的事情…

    1 回复  |  直到 15 年前
        1
  •  2
  •   rohanpm    15 年前

    问题不仅仅在于决定要向流程中写入什么。

    不能仅仅通过读取/写入进程的stdout/stdin来模拟终端,这比这要复杂得多。想想这个节目 less 或者任何寻呼机。它如何知道一次打印多少行?它需要有关未通过stdin/stdout/stderr表示的终端的信息。

    模拟终端超出了qprocess的范围。如果您确实需要这样做,那么可以使用一些现有的基于qt的终端模拟器作为起点(例如konsole)。