是否有任何 UI 库可以从同一来源构建文本用户界面(ncurses)和图形用户界面(GTK?QT?)?我知道 debconf 可以与各种前端一起使用,我想构建一些类似但可编程的东西。
8 回答
支持 YaST 独立性以使用一个代码库执行 ncurses、gtk 和 qt 的库提供了您正在寻找的内容,并且它不依赖于 YaST 本身。
实际上 libyui 只需要标准 C++ 库和 phtreads (IIRC)。UI 插件当然需要各自的库(Qt、ncurses)。YaST 通过一组 YCP 绑定使用 libyui,这些绑定在 libyui 之上导出类似 YCP 的 API。
该库有点低级(事件循环下方的一层),我的同事 Klaus Kämpf 不久前在他的博客中写过使用它,包括使用 swig 绑定到脚本语言。
唯一特定于 SUSE 的部分是打包,因此您需要自己打包。Stackoverflow 不允许我多次链接。该库的代码链接自 Klaus 博客。将 libyui 替换为“qt”,将插件代码替换为“ncurses”。
还可以在 Google 上搜索“YaST 独立于 YCP”,以找到 Andreas Jäger 关于该主题的博客条目。
您可以编写程序以使用 ncurses,然后使用PDCurses将其转换为 X11 应用程序 - 正如自述文件所宣传的那样。
我知道它是因为我将它用作便携式诅咒,尽管我从未测试过它的 X11 功能
不完全是一个库,但您可以考虑编写一个可以很好地降级到 Lynx 的 Web 应用程序
通过使用同时针对文本模式和 GUI 环境的库,您将面临陷入两全其美的巨大风险。
您最好使用MVC 模式来构建您的代码,并为您所针对的每个平台提供单独的视图和控制器。将所有逻辑下推到模型类还有其他几个好处:
- 代码将更容易测试,因为您被迫将用户界面排除在实际的域逻辑之外。
- 您的程序可以具有很少有共同点的用户界面,例如 Web UI 或由语音驱动的 UI。
- 通过以与控制器类相同的方式直接访问模型类,您可以在完全没有 UI 的情况下轻松运行程序(即编写脚本)。
有Cursed GTK,但似乎有点过时了。我发现了一些对 Qt 端口的引用到 ncurses 称为 Qt 控制台,但它似乎已经消失了。
我认为编译时用于配置linux内核的是dialog/cdialog/xdialog。但是我已经有一段时间没有编译内核了,所以我的记忆可能已经关闭。我能找到的最有希望的链接是Xdialog的这个链接。