实践Qt MVC

目录

引子

几个复杂点

自定义表头

单元格显示

​​​​​​​单元格编辑

一些特殊说明

主要代码


引子

最近的项目终于用Qt实践了一个复杂表格编辑功能,用到了Qt的MVC,自定义了Model和delegate;

前几年做过几个复杂的表格编辑功能,印象不深刻了,现在做个记录;

以前的项目没这么复杂的表格功能,这次的项目终于用到并且实践了一次,完成了之前想过但是一直没机会尝试的内容,实现了包括单元格编辑正则限制、验证、单元格根据内容改变颜色、单元格中组合文字和控件(单选、按钮、下拉框)、单元格菜单、单元格绘制;

还好用Qt实现如果用MFC绝对是噩梦;

实现的过程中遇到很多问题,通过查询assest、查看基类函数、看基类源码、baidu查询,弄懂原理后,在自定义的Model、delegate、item中做了修改,都可以解决;

还有和业务需求做好分层,我将业务需求单独定义很多类,定义各类数据对象;

实践Qt MVC_第1张图片

几个复杂点

自定义表头

需求有个复杂的表头,前三行和前三列需要锁定,且有合并单元格;

这里没有用自定义QHeadView的方式,在Model的data方法中计算显示的每个内容,根据滚动条的value自己计算,自己写了一个复杂的MySetSpan函数,根据滚动条和业务需求设置表头、合并单元格;

​​​​​​​单元格显示

显示是需要根据业务逻辑显示文字、背景色;总的思路在在Model的data方法中根据role来区分显示规则,然后根据业务的MyItem决定应如何显示;

显示单选、下拉框、 文字和按钮需要在deletgate的paint中绘制,paint的有控件样式、位置等等,绘制文字绘制按钮下拉框等等;

​​​​​​​单元格编辑

实现功能也遇到一些问题,需要delegate和model之间交互数据,修改构造方法,给delegate传入了model;主要重写的方法;

  1. 编辑功能包括重写editorEvent方法,在其中根据鼠标事件,得到单选勾选、显示右键菜单、按钮响应、弹出自定义对话框;
  2. 重写createEvent方法,实现下拉框编辑,实现正则验证;

重写paint方法,实现绘制单选框、下拉框、按钮等;

 

一些特殊说明

有很多细节应该记录,但是有些细节的解决方法记不得了,遇到自己解决就可以了,看看对应类的assist文档,F2跳到源码看看都能自己解决;

序号

问题

解决

1

单元格下拉框编辑后,需要立即提交数据,但是默认的combox是不支持的

自定义了ComboBox类,在OnListItemChanged槽中,调用this->close(),这样就解决了;

     

 

主要代码

MyTableModel、MyItemDelegate、MyItem

相关源码待上传

你可能感兴趣的:(编程)