基于QSortFilterProxyModel实现表格数据查询排序框架
来源:互联网 发布:25颗摇头矩阵灯厂家 编辑:程序博客网 时间:2024/06/05 19:46
表格是用户界面中最常用的控件,Qt的QTableView采用Model-View模式实现了强大的表格数据展现功能,视图与模型分离,且性能表现非常不错,几百万的数据展现轻松搞定。
但QTableView没有提供数据排序与查询的功能,需要借助于QSortFilterProxyModel这个代理模型,对于一个多窗体的应用程序,每个窗体下的表格控件单独排序是没有问题的,但要实现数据查询与过滤,基于QSortFilterProxyModel需要设置被查询的列及要查询的字符串,如果每个窗体都单独实现,需要每个窗体内都增加一个ListBox及TextBox,分别进行列的设置及要查询的字符串的输入,需要编写重复代码且界面不美观,本文给出的表格数据查询排序框架设计通过工具栏的方式实现列的选择与查询字符串的输入,各子窗体通过与该工具栏的动态绑定实现数据查询的功能。架构设计如下图所示。
MainWindow是主窗体类,包含了多个SubWindow子窗体,通过switchWindow接口实现不同子窗体间的切换显示,MainWindow还包含了一个工具栏QueryToolBar,实现查询列及查询字符串的输入,包括TitleListBox与QueryTextBox两个控件,QuyerToolBar实现了TitleUpdater接口,该接口用于更新可用于查询的列的集合,即TitleListBox中的项。
每个需要进行表格数据查询的子窗体都包含一个SortFilterTableView对象,该对象继承自QTableView,同时还继承自TableDataFilter接口,该接口包含两个接口函数,一个filterData,用于输入查询的列及查询字符串,一个setTitleUpdate,用于设置TitleUpdate接口。
在主窗体进行子窗体切换以激活某个子窗体时,子窗体通过接口getTableDataFilter将表格数据过滤器对象动态传递给QueryToolBar,当QueryToolBar中的两个控件内容发生变化时,通过接口函数filterData将查询信息传递给SortFilterTableView,实现数据查询过滤的功能。
在子窗体通过接口getTableDataFilter将表格数据过滤器对象动态传递给QueryToolBar时,QueryToolBar会通过tableDataFilter的接口函数setTitleUpdater将TitleListBox传递给SortFilterTableView,当表格总的列名或列的个数发生变化时,通过接口TitleUpdater更新TitleListBox中的内容。
以上框架的实现,符合面向对象设计原则,面向接口编程,职责单一,易于扩展。
- 基于QSortFilterProxyModel实现表格数据查询排序框架
- QSortFilterProxyModel实现数据筛选
- Qt中QSortFilterProxyModel关于多列排序的实现
- Qt中QSortFilterProxyModel关于多列排序的实现
- Qt中QSortFilterProxyModel关于多列排序的实现
- Qt中QSortFilterProxyModel关于多列排序的实现
- 表格(查询数据 、 排序 、添加数据 、敏感词)
- 用JavaScript实现表格数据的排序
- 鼠标点击html表格表头实现表格数据自定义排序
- 利用JQuery方便实现基于Ajax的数据查询、排序和分页功能
- JQuery实现基于Ajax的数据查询、排序和分页功能
- 利用JQuery方便实现基于Ajax的数据查询、排序和分页功能
- 基于SpringMVC+Bootstrap+DataTables实现表格服务端分页、模糊查询
- QSortFilterProxyModel
- QSortFilterProxyModel
- QSortFilterProxyModel
- struts2+zkoss框架中,zk表格排序的实现
- 基于Ajax技术实现的数据表格控件
- Stanford 机器学习笔记 Week8 Dimensionality Reduction
- 性能测试学习和性能瓶颈分析路线
- 第9章andriod程序破解
- name after, name for, name as
- Problem Q
- 基于QSortFilterProxyModel实现表格数据查询排序框架
- LinuxMint安装报错(使用磁盘的最小对齐,这可能造成非常差的性能),安装无法继续
- js中的距离值之间的关系
- 整合ssm时的一些注意点
- C++中有个malloc/free,为什么还需要new/delete?
- Android高阶UI之开源项目
- Python学习笔记_01 环境构建
- 算法:各类排序
- Ubuntu14.04下OpenCV2.4.10安装