【发布时间】:2016-05-25 05:40:00
【问题描述】:
我正在编写代码,我想将其制成两种变体——使用 ncurses 实现的基于文本的界面 (TUI),以及使用 Qt5 实现的 GUI。因此,在命令行中传递一个参数,我可以选择运行哪个版本 - 使用 GUI 或 TUI(例如,就像在 openSUSE 中使用 YaST)。其余代码,包括来自键盘的输入,应该与选择的界面(TUI 或 GUI)无关。正如我所看到的,实现这样一个程序的最佳方式是使用不同的类进行输入、用户界面等。所以,在我运行代码的任何版本中,处理输入的类应该是相同的,并且它通过接口类的数据,可能是 TUI 或 GUI,这取决于应用程序的启动方式。问题在于,对于 ncurses,似乎不可能将输入与输出分离。基本上,我想要的是仍然能够使用 ncurses 输出(窗口、面板等),但要使用其他库执行输入。任何人都知道如何解决这个问题?另外,在任何模式(终端或 GUI)下,我可以使用哪些输入 C/C++ 库来读取键盘事件?
【问题讨论】:
-
我建议为您的程序构建两个版本,一个用于 gui,一个用于 cli,或者检测不同的情况,并尽快将程序交给 QT 或命令行。试图概括这一点可能会比它的价值更麻烦。
-
我想知道这是如何在 YaST 中实现的(以及其他可以同时使用 ncurses 和 GUI 界面运行的单一构建应用程序,具体取决于具体情况)。每个接口是否有不同的输入处理程序?
-
我有理由确定这些应用程序不是单个可执行文件,而是使用不同选项编译的相同源代码 [for text and gui],以及一个包装器 shell 脚本(或二进制文件)决定使用哪个。
-
好的,谢谢。我认为这将是一个简单的解决方案,但似乎反过来 :) 我会遵循 Phil 的建议。
-
XY 问题。 “从输出中分离输入”对您意味着什么? ncurses 究竟是如何阻碍它的?请提供说明问题的代码示例。
标签: c++ qt keypress ncurses keyevent