前言:
本文就不介绍基础了
需要具备 M-V-D的知识
model view delegate
不清楚 mvd 结构的 建议先去了解一下 否则看起来比较吃力
项目结构比较简单清晰 一个小demo
github 源码地址
main 函数
manwindow 主界面
progressbardelegate 自定义的进度条委托
我们自定义委托 直接上代码吧
我们这个小demo 只需要 重写基类的 paint 就行
如果有其他需要 可以看基类的 成员函数
这里就不多说了
paint 的实现
首先 只有第2列的 单元格的内容才变为进度条
所以 我们上面的判断条件 是 index.column() == 1
下面是 写了进度条
当前的进度
rect 外边框位置
最大最小值
文字 18%
有人可能好奇 为啥 不用QProgressBar 而用 QStyleOptionProgressBar
因为上面的形参 option 和 draw 的参数 都要填写 QStyle 的子类 啥啥啥 可以看下api
行 这样 我们一个简单的委托就完成了
看一下主界面
mainwindow
这次 我写 没有用 .UI 手撸界面就行 不拖控件了 (不过就一个控件 都不用写布局…)
一个 tableview
一个 model 我们不用自定义 默认的就可以
一个 自定义的委托
M-V-D 集齐了(model tableview delegate)
还有一个定时器Qtimer 用来模仿增加进度的功能
设置 窗口的大小 400,200
实例化 tableview
设置自适应大小
设置item 单元格不能编辑
设置中心窗口 就是 tableview
实例化 model
设置 两列
第一列的表头是 影片名称 第二列的表头是 下载进度
然后 第一列的内容 是xxx
给 tableview 设置 model
实例化 我们自定义的委托
给 tableview 设置 委托
弄一个定时器 每秒触发一次 让当前的进度 +1
ok 简单的 一个自定义委托完成 写的很简单 说的很细了 都能看懂吧 希望能帮到你