当前位置: 首页 > 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的这个功能代码会少三分之一左右,就是有点难以读懂,此外,还有个特么困难的问题,就是依赖了太多qtcreator核心源码的文件,导致这个插件几乎抽离不出来(我尝试了一下,实在没法弄),这就跟从Linux驱动源码里抽出一个目标驱动源码到单片机上进行裸机运行一样困难(Linux驱动开发那套框架其实也就是一种插件机制嘛),因为它这个开发框架,决定了插件源码特别困难移植到其它平台或者裸运行了。

如果做Windows上的不错的终端软件,说实话目前还不知道怎么做比较好了,大家有知道的,评论区告诉我吧,谢谢!

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 面向对象程序设计之继承(C++)
  • ai 回答HFS是什么 HTTP的文件服务器是什么
  • Leetcode3282. 到达数组末尾的最大得分
  • new/delete和malloc/free到底有什么区别
  • VUE + NODE 历史版本安装
  • AWTK fscript 中的 value 扩展函数
  • synchronized的详解、锁的升级过程和优缺点比较
  • Maven 解析:打造高效、可靠的软件工程
  • JavaSE:9、数组
  • 3. 进阶指南:自定义 Prompt 提升大模型解题能力
  • 记录word转xml文件踩坑
  • 机器学习特征构建与特征筛选
  • Vue3实现打印功能
  • LeetCode[中等] 3. 无重复字符的最长子串
  • 简洁明了!中缀表达式转为后缀表达式规则及代码
  • [译]CSS 居中(Center)方法大合集
  • 345-反转字符串中的元音字母
  • Android 架构优化~MVP 架构改造
  • android百种动画侧滑库、步骤视图、TextView效果、社交、搜房、K线图等源码
  • Brief introduction of how to 'Call, Apply and Bind'
  • CSS居中完全指南——构建CSS居中决策树
  • Django 博客开发教程 8 - 博客文章详情页
  • ES6核心特性
  • express + mock 让前后台并行开发
  • JavaScript对象详解
  • java多线程
  • Java方法详解
  • Linux后台研发超实用命令总结
  • mac修复ab及siege安装
  • mongo索引构建
  • mysql中InnoDB引擎中页的概念
  • PAT A1017 优先队列
  • SpringBoot几种定时任务的实现方式
  • WordPress 获取当前文章下的所有附件/获取指定ID文章的附件(图片、文件、视频)...
  • 跨域
  • 前端技术周刊 2018-12-10:前端自动化测试
  • 入手阿里云新服务器的部署NODE
  • 我从编程教室毕业
  • [Shell 脚本] 备份网站文件至OSS服务(纯shell脚本无sdk) ...
  • ​香农与信息论三大定律
  • # Python csv、xlsx、json、二进制(MP3) 文件读写基本使用
  • #QT(QCharts绘制曲线)
  • #window11设置系统变量#
  • (2024,LoRA,全量微调,低秩,强正则化,缓解遗忘,多样性)LoRA 学习更少,遗忘更少
  • (M)unity2D敌人的创建、人物属性设置,遇敌掉血
  • (亲测有效)解决windows11无法使用1500000波特率的问题
  • (十三)Java springcloud B2B2C o2o多用户商城 springcloud架构 - SSO单点登录之OAuth2.0 根据token获取用户信息(4)...
  • (一)【Jmeter】JDK及Jmeter的安装部署及简单配置
  • (一)utf8mb4_general_ci 和 utf8mb4_unicode_ci 适用排序和比较规则场景
  • (一)插入排序
  • (原创)攻击方式学习之(4) - 拒绝服务(DOS/DDOS/DRDOS)
  • (转)平衡树
  • .gitignore文件---让git自动忽略指定文件
  • .net core 6 redis操作类
  • .NET Framework 服务实现监控可观测性最佳实践