Qt 自定義model實現檔案系統的檔名排序

2021-07-04 08:30:12 字數 985 閱讀 1931



前段時間,需要做乙個功能是要做檔案系統的排序的功能。由於是自己寫的model, 自己定義的資料結構。最初的想法只有乙個自己去實現資料夾跟檔名的排序演算法,不過感覺比較費時間。後來想到的是qfilesystemmodel就是qt標準的檔案系統的model,可以把裡面關於排序的演算法提出來,沒有必要重複造輪子。看了一下qfilesystemmodel的原始碼,找到的排序演算法如下(主要單元在qfilesystemmodel.cpp):

1)檔案系統的檔名排序主要涉及到資料夾跟檔案的順序(資料夾要排在檔案前),檔案大小的排序,檔案型別,修改時間的排序

2)qfilesystemmodel重寫了sort

[cpp]view plain

copy

void

sort(

intcolumn, qt::sortorder order = qt::ascendingorder);  

裡面首先通過乙個

qlist>

把所有的結點取出來的,然後呼叫

[cpp]view plain

copy

d->sortchildren(column, index(rootpath()));   

對取出來的資料進行排序

,sortchildren裡對是否屬於當前路徑的子進行過濾。然後呼叫

qfilesystemmodelsorter

對裡面的結點進行排序。呼叫的是stl 的std:sort,排序的演算法呼叫的qfilesystemmodelsorter的。這裡的演算法可以整個提出來。演算法的細節就沒有再繼續下去了。

3)自己實現的model可以同樣參考這樣的流程:重寫sort檔案,把當前路徑的子提出來了,然後呼叫qfilesystemmodelsorter的排序演算法進行排序,將排序出來的結點,重新構造新的結點給model就可以了。

qt原始碼裡還有很多東西值得借鑑的,是乙個大寶庫。

QT 自定義Model及相關demo

隨著開發專案的不斷增大,業務結構越來越複雜,為了提高程式設計師的開發效率和降低維護成本 的可讀性 在qt中使用mvc mvd 模式是行之有效的方法。而自定義model則是使用mvc模式的第一步。qt給我們預定義了許多model,view和delegate,也就是說我們可以很方便快速的繼承相應的類完成...

匯入自定義模組model

編寫m2.py,指令碼內容如下 usr bin python coding utf 8 its a module test author mm import sys 定義函式ft defft x x int x sum x 3 print sum ft sys.argv 1 直接執行指令碼 m2.p...

QT內省機制 自定義Model 資料庫

本文將介紹自定義model過程中資料庫資料來源的獲取方法,我使用過以下三種方式獲取資料庫資料來源 本文重點介紹第二種,即利用qt的內省機制來獲取資料。1.自定義model過程 通過內省功能獲得字段值,也就是第二種方法 本文中自定義model繼承於qabstracttablemodel 重點描述set...