通过点击的方式执行命令-commandUI

效果图

在这里插入图片描述
每天上班都需要启动多个项目,才能够进行项目的开发,日复一日的重复动作,总是会令人厌恶,所以就有了这么一个小工具,通过点击的方式运行系统命令,不用一遍一遍的输入命令。

使用的技术

C++,FLTK

需求

能够通过图形化界面,运行需要执行的命令

需求拆分
  1. 需要具备一定的可扩展性,虽然当前命令只有4个,但是后续可能会继续增加命令,所以使用一个文件文件来保存需要运行的命令
  2. 有些命令会持续占用执行权,有些命令不会,所以需要保存命令的运行不会阻塞主函数的执行
解决方案
  1. 使用一个txt文件保存需要展示的命令,具体格式可以根据需要自行设置
    在这里插入图片描述
    我使用格式就是简单的命令名称 = 命令的格式,通过等号来分割,一行就是一个命令,通过ifstream来读取文件,以行为单位依次解析出 命令名称和其对应的命令
  2. 为每一个命令分配一个线程,通过在对应的线程中执行命令,就不会阻塞主线程的运行。

问题

  1. 通过 >> 来读取文件的内容,当遇到空格,换行,就会终止本次的读取
    1. 通过循环,完成全文件的读取
    2. stringstram和fs.rdbuf 配合使用一次性读取所有的文件内容
  2. c++的变量作用域
    1. 变量只在当前***{}***中有效,如果需要持续存储,可以保存到堆区,声明一个结构体,保存每一个小按钮的信息,避免有效信息,被释放掉,导致按钮展示乱码或者无法展示。
      • 现象
        在这里插入图片描述
        这就是在循环中访问读取到的字符串,但是当前循环结束以后字符串所在的内存空间就报设法调了,导致FL_Button访问这块内存空间获取label时出现乱码,或者错误信息。
  3. FL_Scroll的第一个子组件的top值会失效,没有找到具体的原因
    1. 通过添加一个无效的空盒子设置top值为0,用于占据第一个位置,使得后续的组件能够拥有正常的top值
      在这里插入图片描述

收获

  1. c_str 返回的是string类型保存字符的地址空间的首地址,所以c_str返回的字符串和string保存的字符串共享一块内存空间,string被销毁了,c_str得到的字符串也会被销毁
  2. 在循环中变量的有效期只在当前循环,除非保存到堆上
  3. 结构体也是具有初始化函数的
  4. getline的一种用法
    1. getline(a, b, c); 从a中读取内容到b,以c为分割符,读取成功返回true值(字符串句柄,没实验过)。
  5. 读取文件的方法,rdstream配置stringstream读取完整的文件内容
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值