Qt 模型视图编程中的自定义视图与通用委托
1. 自定义视图
在视图编程中,我们会遇到自定义视图的需求。以某个特定的视图为例,它支持用户通过上下箭头键来导航选择行。当用户按下上下箭头键时,会有以下操作:
- 若用户按下上箭头或下箭头键,会对选中行进行相应的递增或递减操作。
- 确保选中行在有效范围内。
- 安排一次绘制事件,以更新视图显示。
- 若用户导航到最上面可见行之上或最下面可见行之下,会通知滚动区域确保滚动到的行可见,必要时滚动区域会自动滚动。
- 同时发出clicked()信号,携带新选中行的模型索引。
代码示例如下:
self.emit(SIGNAL("clicked(QModelIndex)"), self.model.index(self.selectedRow, 0)) else: QWidget.keyPressEvent(self, event)对于其他按键,会将事件传递给基类处理。
像水质视图小部件与旁边的表格视图在视觉上有很大差异,但实现它所需的代码并不多,编程难度也不大。通过减少不必要的绘制,提高了小部件的效率。同时,确保小部件的大小刚好能显示整个数据集,使绘制代码尽可能简单。不过,这种方法的缺点是将使用QScrollArea的责任推给了使用该小部件的程序员,不过这也避免了自己实现滚动功能。
水质视图将数据与模型中的数据进行了一一对应的可视化展示,但我们并不局限于此,也可以创建显示聚合数据的自定义