采用qt做一个命令行终端
qt做一个类似系统命令行终端的工具,方便集成到自己的软件里使用,这样能保证软件的整体性,而且是真正的做到和系统命令行终端一样的交互方式,而不是单独搞个编辑框的方式输入命令(大部分博客都是做成这个样子),有3个方法:
1. 用推荐比较多的开源库QTermWidget(注意,好像只能在linux上编译运行,不支持windows的,我搞了一下windows反正不行)
GitHub - lxqt/qtermwidget: The terminal widget for QTerminal
但是网上好像使用例程比较少,自己可以琢磨琢磨。
这里分析一下类继承关系:(相关功能代码约 1万行左右)
2. qtcreator自己有一项插件就支持命令行终端功能
做得还挺好的,如下图:
所以,我们可以学习借鉴 qtcreator 源码中关于这个终端的实现代码呀。首先,我们需要下载qtcreator的源码:Index of /snapshots/qtcreator/14.0/14.0.2/installer_source/218 (https://download.qt.io/snapshots/qtcreator/14.0/14.0.2/installer_source/218/)
注意:版本得13以上,才有这个功能。
然后,我们用qtcreator打开这个下载的qtcreator源码,终端功能模块源码路径如下:
src -> plugins -> terminal
也就是说,终端功能模块是以插件存在的,我们可以动态加载和去掉该功能,在qtcreator的帮助然后关于插件菜单里就能加载和去掉该插件了,然后界面中就不显示该功能了。
这里简单分析一下qtcreator这个终端功能模块的源码文件以及类继承关系:(约7000行代码左右,不包括引用qt一些其它第三方引用库代码(没注意看有没有引用到))
界面组成:
具体类继承关系:
3. 不像前面两个一样后台交互的是操作系统的shell本质,而是后台和操作系统本身的终端例如windows的cmd 进行交互,就是负责喂数据读数据显示,网上大部分博客都是这样干的,但是没法传递ctrl+c这样的按键给终端实现退出进程,但是这是一种最简单能实现的方式了吧,但是功能是受限的,有点像个玩具软件。
4. 总结
特点分析:QTermWidget开源库里面的代码注释丰富,使用语法比较简单易懂,阅读起来比较轻松。然而只能用于linux系统编译通过(因为我看头文件依赖Linux系统头文件,而且还不是宏控制编译的,所以人家就没打算支持windows系统使用的),反正就是windows上难以用上。而qtcreator的这个功能代码会少三分之一左右,就是有点难以读懂,此外,还有个特么困难的问题,就是依赖了太多qtcreator核心源码的文件,导致这个插件几乎抽离不出来(我尝试了一下,实在没法弄),这就跟从Linux驱动源码里抽出一个目标驱动源码到单片机上进行裸机运行一样困难(Linux驱动开发那套框架其实也就是一种插件机制嘛),因为它这个开发框架,决定了插件源码特别困难移植到其它平台或者裸运行了。
如果做Windows上的不错的终端软件,说实话目前还不知道怎么做比较好了,大家有知道的,评论区告诉我吧,谢谢!