当前位置: 首页 > news >正文

采用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的这个功能代码会少三分之一左右,就是有点难以读懂。

如果做Windows上的不错的终端软件,还是建议学习qtcreator这个功能模块代码吧,毕竟已经做得不错了,可以参考的。

http://www.lryc.cn/news/435699.html

相关文章:

  • TQA相关
  • Spring Cloud之二 微服务注册
  • [Web安全 网络安全]-文件上传漏洞
  • 【白话Redis】缓存雪崩、穿透、击穿、失效和热点缓存重建
  • flink增量检查点降低状态依赖实现的详细步骤
  • Redis总结,是什么,干什么,怎么利用?
  • Vue3状态管理Pinia
  • box64 安装
  • OpenCV通过鼠标提前ROI(C++实现)
  • 6.1.数据结构-c/c++模拟实现堆上篇(向下,上调整算法,建堆,增删数据)
  • 【智能终端】HBuilder X 与微信开发者工具集成与调试实战
  • 结构体的字节对齐方式(__attribute_pack(packed))#pragma pack())
  • 若依Ruoyi之智能售货机运营管理系统(新增运营运维工单管理)
  • ModuleNotFoundError: No module named ‘keras.layers.core‘怎么解决
  • C++(三)----内存管理
  • 使用 ShuffleNet 模型在 CIFAR-100 数据集上的图像分类
  • 怎么利用短信接口发送文字短信
  • 【C#生态园】提升C#开发效率:掌握这六款单元测试利器
  • 【QT】自制一个简单的小闹钟,能够实现语音播报功能
  • 基于深度学习的图像描述生成
  • Linux和C语言(Day11)
  • 使用Zlib库进行多文件或者多文件夹的压缩解压缩
  • CSGHub携手Nvidia NIM、阿里计算巢打造企业级私有化部署解决方案
  • opencv的球面投影
  • 5. 去中心化应用(dApp)
  • k8s服务发布Ingress
  • 区块链学习笔记1--比特币
  • 在 Vite 项目中自动为每个 Vue 文件导入 base.less
  • RUST 学习之全局变量
  • 代码随想录八股训练营第三十九天| C++