Qt 自定义委托(delegate) 实现进度条

时间:2024-04-05 09:07:22

前言:

本文就不介绍基础了
需要具备 M-V-D的知识
model view delegate
不清楚 mvd 结构的 建议先去了解一下 否则看起来比较吃力

Qt 自定义委托(delegate) 实现进度条

项目结构比较简单清晰 一个小demo

github 源码地址

Qt 自定义委托(delegate) 实现进度条
main 函数

manwindow 主界面

progressbardelegate 自定义的进度条委托

我们自定义委托 直接上代码吧

Qt 自定义委托(delegate) 实现进度条
我们这个小demo 只需要 重写基类的 paint 就行

如果有其他需要 可以看基类的 成员函数
Qt 自定义委托(delegate) 实现进度条

这里就不多说了
Qt 自定义委托(delegate) 实现进度条

paint 的实现
首先 只有第2列的 单元格的内容才变为进度条
所以 我们上面的判断条件 是 index.column() == 1

下面是 写了进度条
当前的进度
rect 外边框位置
最大最小值
文字 18%

有人可能好奇 为啥 不用QProgressBar 而用 QStyleOptionProgressBar

因为上面的形参 option 和 draw 的参数 都要填写 QStyle 的子类 啥啥啥 可以看下api
Qt 自定义委托(delegate) 实现进度条

行 这样 我们一个简单的委托就完成了

看一下主界面

mainwindow

Qt 自定义委托(delegate) 实现进度条

这次 我写 没有用 .UI 手撸界面就行 不拖控件了 (不过就一个控件 都不用写布局…)

一个 tableview
一个 model 我们不用自定义 默认的就可以
一个 自定义的委托

M-V-D 集齐了(model tableview delegate)

还有一个定时器Qtimer 用来模仿增加进度的功能

Qt 自定义委托(delegate) 实现进度条

设置 窗口的大小 400,200

实例化 tableview

设置自适应大小

设置item 单元格不能编辑

设置中心窗口 就是 tableview

Qt 自定义委托(delegate) 实现进度条
实例化 model

设置 两列

第一列的表头是 影片名称 第二列的表头是 下载进度

然后 第一列的内容 是xxx

给 tableview 设置 model

Qt 自定义委托(delegate) 实现进度条

实例化 我们自定义的委托

给 tableview 设置 委托

Qt 自定义委托(delegate) 实现进度条

Qt 自定义委托(delegate) 实现进度条

弄一个定时器 每秒触发一次 让当前的进度 +1

ok 简单的 一个自定义委托完成 写的很简单 说的很细了 都能看懂吧 希望能帮到你