Qt核心价值及优势
- 跨平台支持,Windows、MacOS、Linux、国产麒麟操作系统、Android、iOS等
- 大数据实时显示,性能优异
- 丰富的图形模块,极致用户体验,用户自定义UI布局
- 符合信创要求,助力国产大型软件建设
- 开放源代码
Qt:基于C++领先的跨平台软件开发框架
Qt高效的工具链
Qt金融行业案例分享
客户需求
› 适用于所有操作系统的单一UI代码库
› 降低维护成本
› 缩短UI开发时间
› 获得Qt企业级专业支持
Qt的解决方案和成果
› 客户战略性部署 Qt 跨平台技术
› 承诺维护成本降低到仅支持一个目标平台
› 具有响应式和品牌化 UX 的 UI 框架,具有原生速度和性能
› 具有Qt商业许可、面向未来的开发策略
Webull案例介绍
- Model/View框架:中文文档
- 性能优化:QTableView,ResizeToContents,QAbstractItemModel,BeginInsert, QContiguousCache,fetchMore
- 功能升级:多级表头,冻结列,汇总行,表头拖动,hover Row,checkBox
模型/视图 编程:中文文档
- model-view-programming
- modelview
来自Qt中文社区翻译的中文文档,更容易理解Model/View框架
性能优化
› 用QTableView代替QTableWidget,性能更佳
QTableWidget等是便利类,如果我们需要高性能的显示,最好使用 QTableView、QListView 和 QTreeView。在这种情况下,您必须编写一个模型类,其中包含要在相应视图类中显示的数据。
›减少ResizeToContents的使用,提升性能
如果对QTableView的verticalHeader或horizontalHeader设置setSectionResizeMode(QHeaderView::ResizeToContents)的话,QTableView会遍历整张表,造成卡顿。所以在表格数据量大的时候,建议将mode设置为 QHeaderView::Interactive 或 QHeaderView::Fixed。
› 用QAbstractTableModel 代替 QStandardItemModel,性能更佳
用 QStandardItemModel 写的模型加载7列20万行数据需要 784 ms;
用 QAbstractTableModel 写的模型加载7列20万行数据需要 25 ms。
› 对于beginInsertRows,如果你有大量数据需要插入 model,推荐将多次 insert 合并为一次
› QContiguousCache
在某些环境中内存是有限的。使用 QContiguousCache,可以优化内存的占用,例如之前的例子,程序运行占用 33.8M 内存,而用 QContiguousCache 优化后,程序运行占用 8M 内存。
› fetchMore
一般的 Model 都是针对固定的数据源,在数据源巨大的情况下,比如大型数据库每个表可能有百万级的数据,最好仅在视图需要这些项目时(即当它们在视图中可见时)将项目批量添加到模型中,fetchMore 和 canFetchMore 就是当你需要增量填充模型时,必须重新实现的函数。
功能升级
› Hierarchical headers多级表头
多级表头,QTableView原生不支持,需要我们继承QHeaderView,自己实现,主要是通过QPainter实现QHeaderView的paintSection函数。
› Dragged columns表头拖动
› Frozen columns冻结列
主要思路是继承 QTableView 创建两个 TableViewBase,然后将一个TableViewBase 叠在另一个 TableViewBase 上,但只显示左边几列,代表冻结列,最后绑定一些信号槽,使滚动条和鼠标事件有效。参考这个思路,我们可以写出右冻结列,上冻结行,下冻结行,固定位置的汇总行。
› Hover Row
› Checkable
表格复选框,包括行选择,列选择,单元格选择,全选。