前言:
本文就不介紹基礎了
需要具備 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 簡單的 一個自定義委託完成 寫的很簡單 說的很細了 都能看懂吧 希望能幫到你