专注于产品开发平台解决方案

Qt金融行业案例分享
分享:

Qt核心价值及优势

- 跨平台支持,Windows、MacOS、Linux、国产麒麟操作系统、Android、iOS等

- 大数据实时显示,性能优异

- 丰富的图形模块,极致用户体验,用户自定义UI布局

- 符合信创要求,助力国产大型软件建设

- 开放源代码

Qt:基于C++领先的跨平台软件开发框架


Qt高效的工具链

Qt金融行业案例分享

Tableau–商业分析与可视化工具

客户需求

› 适用于所有操作系统的单一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

表格复选框,包括行选择,列选择,单元格选择,全选。

行业痛点
解决方案
应用案例