效果图
每天上班都需要启动多个项目,才能够进行项目的开发,日复一日的重复动作,总是会令人厌恶,所以就有了这么一个小工具,通过点击的方式运行系统命令,不用一遍一遍的输入命令。
使用的技术
C++,FLTK
需求
能够通过图形化界面,运行需要执行的命令
需求拆分
- 需要具备一定的可扩展性,虽然当前命令只有4个,但是后续可能会继续增加命令,所以使用一个文件文件来保存需要运行的命令
- 有些命令会持续占用执行权,有些命令不会,所以需要保存命令的运行不会阻塞主函数的执行
解决方案
- 使用一个txt文件保存需要展示的命令,具体格式可以根据需要自行设置
我使用格式就是简单的命令名称 = 命令的格式,通过等号来分割,一行就是一个命令,通过ifstream来读取文件,以行为单位依次解析出 命令名称和其对应的命令 - 为每一个命令分配一个线程,通过在对应的线程中执行命令,就不会阻塞主线程的运行。
问题
- 通过 >> 来读取文件的内容,当遇到空格,换行,就会终止本次的读取
- 通过循环,完成全文件的读取
- stringstram和fs.rdbuf 配合使用一次性读取所有的文件内容
- c++的变量作用域
- 变量只在当前***{}***中有效,如果需要持续存储,可以保存到堆区,声明一个结构体,保存每一个小按钮的信息,避免有效信息,被释放掉,导致按钮展示乱码或者无法展示。
- 现象
这就是在循环中访问读取到的字符串,但是当前循环结束以后字符串所在的内存空间就报设法调了,导致FL_Button访问这块内存空间获取label时出现乱码,或者错误信息。
- 现象
- 变量只在当前***{}***中有效,如果需要持续存储,可以保存到堆区,声明一个结构体,保存每一个小按钮的信息,避免有效信息,被释放掉,导致按钮展示乱码或者无法展示。
- FL_Scroll的第一个子组件的top值会失效,没有找到具体的原因
- 通过添加一个无效的空盒子设置top值为0,用于占据第一个位置,使得后续的组件能够拥有正常的top值
- 通过添加一个无效的空盒子设置top值为0,用于占据第一个位置,使得后续的组件能够拥有正常的top值
收获
- c_str 返回的是string类型保存字符的地址空间的首地址,所以c_str返回的字符串和string保存的字符串共享一块内存空间,string被销毁了,c_str得到的字符串也会被销毁
- 在循环中变量的有效期只在当前循环,除非保存到堆上
- 结构体也是具有初始化函数的
- getline的一种用法
- getline(a, b, c); 从a中读取内容到b,以c为分割符,读取成功返回true值(字符串句柄,没实验过)。
- 读取文件的方法,rdstream配置stringstream读取完整的文件内容