Qt 中实现两个 QTableView 同步高亮与滚动的方案
在实际项目中,我们常常需要将同一数据的不同视图展示在多个 QTableView 中。尤其在数据维度较多、展示内容不同但行数及行顺序一致的场景下,用户希望在一处操作(例如选中一行或滚动页面)时,其他视图也能自动同步相应的状态。本文将重点介绍如何利用 Qt 的 QItemSelectionModel 与 QScrollBar 实现两个 QTableView 同步高亮(选中行)和同步滚动的效果。
1. 背景与需求
考虑这样一种情况:
- 不同展示内容:两个 QTableView 分别显示不同列的数据,但它们均来自相同的行数据(例如,一边显示详细信息,另一边显示摘要)。
- 一致行结构:虽然展示内容不同,但两个视图的行数和行顺序完全一致。
- 同步交互需求:
- 同步高亮:当用户在某一视图中选中一行时,另一视图应自动高亮相同行,方便用户对比数据。
- 同步滚动:当用户在某一视图中滚动时,另一视图应同时滚动,保证行与行之间的一一对应。
2. 同步高亮——共享选择模型
Qt 中每个 QTableView 都有自己的选择模型(Selection Model),用于跟踪当前被选中的项。如果两个视图共享同一个选择模型,则在任一视图中进行的选中操作,都能立即反映到另一视图上。
2.1 基本实现方法
由于两个 QTableView 的行结构一致,我们可以让它们共享同一个