【问题标题】:Interactive Command Line Interface for QtQt 的交互式命令行界面
【发布时间】:2021-04-23 20:04:35
【问题描述】:

我正在为 Qt 中的应用程序创建一个跨平台的 readline/linenoise 类型的命令行界面。如果可能的话,我宁愿不重新发明轮子。用户正在操作的终端应该能够通过命令提示符接收命令。这将在 Qt 中完成,因此我的问题是:是否有一种 Qt 风格的方式通过信号和插槽来执行此操作,以便当用户在终端中输入一行时可以调用插槽?

我知道这可以相当简单地完成,使用 QThread 并运行阻塞进程以在正在读取的行上发出信号。这个问题专门针对使用内置 Qt 功能。

【问题讨论】:

标签: c++ qt


【解决方案1】:

在试图找出一个可行的答案时,我意识到我的问题措辞不当。我在寻找可以称为Terminal Emulator 的东西。有几个现有的解决方案,包括 QTermWidget。但是,似乎还没有基于非 UI 的 Qt 终端仿真器。也就是说,为了使用这些,必须有一个活动的 Qt UI 实例,而不仅仅是使用 Qt 命令行应用程序。

走使用简单Qt命令行的路线,并不像连接QTextStream之类的东西并观察命令行输出那么简单。与大多数命令行程序一样,必须进行本机的低级处理才能评估箭头键之类的内容。不幸的是 QKeyPressEvent 等需要 UI 运行。

【讨论】:

  • 由于 Qt 以 GUI 开发为导向,我不确定它是否适合开发命令行应用程序。 (这并不是说你不能让它工作,只是可能还有其他 API 更适合这项任务)
  • @Jeremy Friesner 我个人不太喜欢为此目的使用 Qt,但目标是创建一个具有最少技术堆栈的跨平台服务器解决方案。 Qt 被广泛使用并且可以在命令行模式下运行。此外,根据开发人员团队的经验,替代语言不是一种选择。这使得 C++/Qt 成为“随处运行”CLI 的最佳选择,除非您有其他基于 C++ 的解决方案。
  • 嗯,linkNcurses 是我想到的,不是我自己用过的。
  • ncurses 适用于 Linux,但 AFAIK,它没有移植到 Windows。此外,还有linenoise 之类的软件,但这是一个非 Qt-Native 解决方案。我很好奇 Qt 是否有明确可用的东西,或者专门为此开发的东西。如前所述,似乎没有……只有基于 UI 的解决方案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-02-26
  • 1970-01-01
相关资源
最近更新 更多