网站首页 > 博客文章 正文
spreadsheet是一个简单的电子表格程序,相当于简化版的excel,日常用用还不错,用自己写的工具还挺过瘾的。
v-0.02版本的需求:
- 完善中央窗口;
- 实现保存文件;
一、完善中央窗口
前面我们是用QTableWidget作为中央窗口,QTableWidget虽然提供了不少电子表格的功能,但是没有剪贴板、数学公式等功能,为了后续方便实现一些自定义的功能,我们需要定义一个QTableWidget的子类:SpreadSheet。同时,我们也应该将一些底层的操作封装在SpreadSheet里,供MainWindow调用,这样程序比较有层次感。
※ SpreadSheet里要做什么?
随便想想:
- 所有仅和中央窗口相关的功能都应该在SpreadSheet里实现;
- 初始化表格的外观,例如设置行列标题等;
- 实现底层的文件保存(writeFile())和载入(readFile())功能,供MainWindow调用;
- 实现表格的复制粘贴删除(cut()/copy()/...);
- 实现表格的排序功能(sort());
- 实现查找功能(findNext());
- 实现数学公式(formula());
- 定义表格被修改时的信号(modified())和槽(somethingChanged()),用于管理表格自身的状态;
目前就想到这么多,剩下的边做边想就好了,没必要过度设计。
※ 添加SpreadSheet类
在MainWindow的构造函数中改用SpreadSheet对象:
spreadsheet = new SpreadSheet;
※ 初始化表格的外观
在SpreadSheet里定义一个clear(),负责清空表格,将表格恢复成初始化的状态:
- 创建SpreadSheet对象时和打开文件时会执行clear();
- RowCount=999,ColumnCount=26(即A~Z),所以第一个单元格为A1,最后一个单元格为Z999;
- SpreadSheet继承于QTableWidget,QTableWidget里的setRowCount()/setColumnCount()/setCurrentCell()被继承下来了,可直接调用;
- QTableWidgetItem用于表格一个单元格,当用户在空单元格输入文本时,QTableWidget会自动创建一个QTableWidgetItem;
- setHorizontalHeaderItem()会为指定的列设置表头;
运行效果:
二、实现File菜单
※ 如何保存文件(Save和SaveAs功能)?
1> 只有先实现了保存文件的功能,才能接着实现载入文件的功能;
2> 第一次保存文件(MainWindow::save)时,先要让用户选择保存的路径(MainWindow::saveAs),保存过一次后要记录下当前文件(curFile)的完整路径,然后再写数据到文件里(MainWindow::saveFile)。再次执行save时,则直接将数据写到文件(curFile)里(saveFile):
* 在MainWindow::createActions()中绑定saveAction的triggered()信号和槽save():
* save()的定义如下,先判断是否有了目标路径,有的话直接保存,没有的话弹出对话框:
* saveAs()负责弹出对话框供用户选择目标路径:
- "Save Spreadsheet" 是对话框标题;
- "." 表示从当前目录开始;
- "Spreadsheet files (*.sp)" 是文件过滤器,前半段是注释,括号内的是通配符;
嵌入式物联网需要学的东西真的非常多,千万不要学错了路线和内容,导致工资要不上去!
无偿分享大家一个资料包,差不多150多G。里面学习内容、面经、项目都比较新也比较全!某鱼上买估计至少要好几十。
点击这里找小助理0元领取:加微信领取资料
* saveFile()会调用SpreadSheet::writeFile,并且更新状态栏:
3> 当用户在空单元格输入文本时,QTableWidget会自动创建一个QTableWidgetItem,即数据是保存在QTableWidgetItem对象里的。写数据到文件(SpreadSheet::writeFile)本质就是将SpreadSheet里非空单元格里的数据以自己定义的格式写到文件里。SpreadSheet::writeFile的实现如下:
* QFile用于描述一个文件,它负责文件的打开和关闭;
* QDataStream用于描述二进制数据流,它定义了二进制数据的存储方式,例如整型的字节序、字符串的编码格式等。不同版本的Qt的二进制数据存储方式可能会不一样,为了避免兼容性,程序里要明确地设置QDataStream的版本();
* C++的基本类型在不同平台上可能会有不同的位宽,用quint32()强制转换可以确保位宽固定为32bit;
* MagicNumber是用来标识SpreadSheet文件的;
* setOverrideCursor()用于将鼠标的状态设置为等待状态,通常就是一个漏斗;
* SpreadSheet文件的数据格式为:行+列+单元格字符串;
* 不需要手动关闭文件,函数结束时QFile会被析构,QFile的析构函数会关闭文件;
运行效果:
检查数据的正确性:
到此,0.02版本的spreadsheet开发完毕,参考书籍:
《C++ GUI Qt4 编程》
文章链接:
https://mp.weixin.qq.com/s/p2-ha6DHTxdlG8Dn_tqEng
转载自:老吴嵌入式,作者吴伟东Jack
文章链接:Qt入门_开发电子表格_spreadsheet-v0.02
猜你喜欢
- 2024-10-24 python处理excel文件03:xlwt模块写入excel文件
- 2024-10-24 经验 | Python 读写 Excel 文件第三方库汇总
- 2024-10-24 python实现爬取豆瓣电影Top250(python爬取豆瓣电影的流程)
- 2024-10-24 Python如何操作Excel,xlrd和xlwt类库的使用
- 2024-10-24 如何用Python读写Excel文件?最便捷的3种方式
- 2024-10-24 安全服务日常工作之大量端口状态扫描
- 2024-10-24 Python操作Excel库xlrd与xlwt常用操作详解
- 2024-10-24 Python读写Excel表格,就是这么简单粗暴又好用
- 2024-10-24 Python学习之爬取网页信息(python爬取网页数据步骤)
- 2024-10-24 pandas + xlwt制作格式化报表遇到的两个问题
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- powershellfor (55)
- messagesource (56)
- aspose.pdf破解版 (56)
- promise.race (63)
- 2019cad序列号和密钥激活码 (62)
- window.performance (66)
- qt删除文件夹 (72)
- mysqlcaching_sha2_password (64)
- ubuntu升级gcc (58)
- nacos启动失败 (64)
- ssh-add (70)
- jwt漏洞 (58)
- macos14下载 (58)
- yarnnode (62)
- abstractqueuedsynchronizer (64)
- source~/.bashrc没有那个文件或目录 (65)
- springboot整合activiti工作流 (70)
- jmeter插件下载 (61)
- 抓包分析 (60)
- idea创建mavenweb项目 (65)
- vue回到顶部 (57)
- qcombobox样式表 (68)
- vue数组concat (56)
- tomcatundertow (58)
- pastemac (61)
本文暂时没有评论,来添加一个吧(●'◡'●)