表格是用户界面中最常用的控件,Qt的QTableView采用Model-View模式实现了强大的表格数据展现功能,视图与模型分离,且性能表现非常不错,几百万的数据展现轻松搞定。
但QTableView没有提供数据排序与查询的功能,需要借助于QSortFilterProxyModel这个代理模型,对于一个多窗体的应用程序,每个窗体下的表格控件单独排序是没有问题的,但要实现数据查询与过滤,基于QSortFilterProxyModel需要设置被查询的列及要查询的字符串,如果每个窗体都单独实现,需要每个窗体内都增加一个ListBox及TextBox,分别进行列的设置及要查询的字符串的输入,需要编写重复代码且界面不美观,本文给出的表格数据查询排序框架设计通过工具栏的方式实现列的选择与查询字符串的输入,各子窗体通过与该工具栏的动态绑定实现数据查询的功能。架构设计如下图所示。
MainWindow是主窗体类,包含了多个SubWindow子窗体,通过switchWindow接口实现不同子窗体间的切换显示,MainWindow还包含了一个工具栏QueryToolBar,实现查询列及查询字符串的输入,包括TitleListBox与QueryTextBox两个控件,QuyerToolBar实现了TitleUpdater接口,该接口用于更新可用于查询的列的集合,即TitleListBox中的项。
每个需要进行表格数据查询的子窗体都包含一个SortFilterTableView对象,该对象继承自QTableView,同时还继承自TableDataFilter接口,该接口包含两个接口函数,一个filt