47 代理

代理的本质就是编辑器,旨在为视图组件赋予编辑数据的能力。如在表格视图中,编辑一个单元格中数据,缺省使用一个QLineEdit类型的单行文本编辑框。代理一方面要通过模型获取需要编辑的数据,并显示在编辑器内,另一方面还要将编辑后的数据保存到模型中。

Qt代理类的继承结构如下图所示:

其中,QAbstractItemDelegate为抽象类,不能直接使用。其它三个类为具体类,可用于创建代理对象,并提供实际功能。QStyledItemDelegate是视图组件缺省使用的代理类。如果对数据有特殊的编辑要求,可从该类派生出自己的代理类。比如在只允许输入整数的场合,使用一个QSpinBox类型的微调框可能更为合理,而如果希望从下拉列表中选择数据,则不妨选择QComboBox类型的组合框作为代理。