模型视图中的委托
模型视图中的委托
- 委托(Delegate)是视图中处理用户输入的部件
- 视图可以设置委托对象用于处理用户输入
- 委托对象负责创建和显示用户输入上下文
- 如:编辑框的创建和显示
委托中的关键函数
- createEditor
- 需要编辑数据时,创建编辑组件
- updateEditorGeometry
- 更新编辑器组件的大小
- setEditorData
- 通过索引从模型中获取数据
- setModelData
- 将编辑后的新数据返回模型
委托的本质
- 为视图提供数据编辑的上下文环境
- 产生界面元素的工厂类
- 能够使用和设置模型中的数据
自定义委托时需要重写的函数
- createEditor
- updateEditorGeometry
- setEditorData
- setModelData
- paint(可选)
自定义委托类时需要重写相应的成员函数
根据需要创建编辑组件并设置组件中的数据
编辑结束后将数据返回模型
Qt中的委托作为视图的内部组件而存在,因此,委托时视图的一部分;必然,委托需要承担数据显示的部分工作
改进思路:
解决方案:
- 自定义新的委托类
- 在paint成员函数中绘制进度条显示方式
- 在editorEvent成员函数中禁止数据编辑操作
任务进度模拟:
- 定义计时器用于模拟任务进度
- 定义计时器槽函数void timerTimeout()
- 在槽函数中修改模型中的数据