天天看點

Qt之模型/視圖(自定義進度條)簡述效果資料結構QStyledItemDelegateQThread樣式衍伸

在之前的章節中分享過關于qheaderview表頭排序、添加複選框等内容,相信大家模型/視圖、自定義風格有了一定的了解,下面我們來分享一個更常用的内容-自定義進度條。

實作方式:

從qabstracttablemodel中設定對應的進度資料,因為我們需要顯示進度條,而不是直接顯示進度文本,是以原始的資料不需要直接顯示在界面上,是以不需要使用qt::displayrole,可以使用qt::userrole來代替。

委托qstyleditemdelegate中根據進度索引所對應的資料來擷取進度,然後為qstyleoptionprogressbar設定進度值、顯示文本等資訊。

設定樣式,這裡需要qstyle在繪制的時候設定drawcontrol的最後一個參數,是一個qwidget *,這裡我們使用qprogressbar即可。

<a href="#%e7%ae%80%e8%bf%b0">簡述</a>

<a href="#%e6%95%88%e6%9e%9c">效果</a>

<a href="#%e6%95%b0%e6%8d%ae%e7%bb%93%e6%9e%84">資料結構</a>

<a href="#qstyleditemdelegate">qstyleditemdelegate</a>

<a href="#%e6%ba%90%e7%a0%81">源碼</a>

<a href="#qthread">qthread</a>

<a href="#%e6%a0%b7%e5%bc%8f">樣式</a>

<a href="#%e8%a1%8d%e4%bc%b8">衍伸</a>

Qt之模型/視圖(自定義進度條)簡述效果資料結構QStyledItemDelegateQThread樣式衍伸

下面定義了檔案名、大小、狀态、進度所對應的列,以及一個儲存資料的結構體。

這裡隻有繪制部分的代碼,model對應的代碼這裡不再列出,可以參考其它對應的文章。

為了模拟真實性,是以起了一個線程,每隔1秒重新整理一次。

這裡為了美觀,我設定進度條距離左、上、右、下的距離均為8px,而且單元格裡面隻顯示了一個進度條。

這裡隻需要控制好單元格繪制區域位置rect即可,你可以在裡面添加任意自定義的控件,而且可以添加任意多個,随意排列組合。

繼續閱讀