天天看點

Qt之QHeaderView排序簡述效果自定義資料QAbstractTableModel使用思考

在windows中我們經常會遇到表頭排序,比如可以對檔案按照名稱、修改日期、類型、大小進行排序,友善我們統一的歸類查找。

qt中,我們可以通過點選表頭來對qtableview或qtreeview等一系列進階視圖進行排序,對于一般的資料來說-比如:int、qstring等,簡單的幾句代碼就可以搞定,因為qt内部做了很好的排序處理,但是一般情況下,我們需要處理一些特殊格式的資料,這時,我們就不得不自己處理,以達到理想的效果。

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

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

<a href="#%e8%87%aa%e5%ae%9a%e4%b9%89%e6%95%b0%e6%8d%ae">自定義資料</a>

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

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

<a href="#%e6%8e%a5%e5%8f%a3%e8%af%b4%e6%98%8e">接口說明</a>

<a href="#%e4%bd%bf%e7%94%a8">使用</a>

<a href="#%e6%80%9d%e8%80%83">思考</a>

Qt之QHeaderView排序簡述效果自定義資料QAbstractTableModel使用思考

定義各列資料及結構體

自定義模型

updatedata

主要用于更新資料,重新整理界面。

data

用來顯示資料,根據角色(顔色、文本、對齊方式、選中狀态等)判斷需要顯示的内容。

setdata

用來設定資料,根據角色(顔色、文本、對齊方式、選中狀态等)判斷需要設定的内容。

headerdata

用來顯示水準/垂直表頭的資料。

flags

用來設定單元格的标志(可用、可選中、可複選等)。

細心地童鞋可能會發現,當點選表頭(檔案名)的時候,如果按照升序排列時,順序依次是:name 14、name 19、name 4、name 8、name 9,降序則相反。為什麼呢?

其實這個很好了解,因為檔案名所在的列顯示的資料類型為qstring,而qstring排序是按照第一個字母開始比較,直至最後一個字母,例如:name 19和name 4,首先比較name是相同的,當比較1和4(注意這裡不是按照整形比較19和4)的時候,發現1比4小,是以name 19排在name 4之前。

對于檔案大小的顯示,一般情況下,我們顯示的是kb、mb、gb等機關,而不會顯示位元組,那麼按照1的說法,在這種情況下,升序排列時,10 k 就會排在8 k之前了,是以我們應該避免這種問題。

上面所述的簡單排序誰都會,如何把前面的資料按照字元串比較,而後面的資料按照整形比較呢?如何将整形顯示為字元串,而排序依然正常呢?這都是我們下節要分享的精彩内容,請持續關注!

繼續閱讀