Qt中使用QDirModel / QFileSystemModel + QTreeView顯示Checkbox複選框
阿新 • • 發佈:2019-02-18
需要編寫一個QDirModel / QFileSystemModel的子類,重寫QDirModel / QFileSystemModel的flags( ),data( ),setData( )方法。
定義一個QSet<QPersistentModelIndex>,名為checkedIndexes,用於記錄Checked的路徑名。
flags( )中返回 ItemIsUserCheckable。
data( )中判斷給定的項是否在checkedIndexes中,有的話就返回Qt::Checked,沒有 就返回Qt::Unchecked。
setData( )則把值為Qt::Checked
recursiveCheck( )用於遞規新增子節點。
下面的程式碼是基於QDirModel寫的。如果用QFileSystemModel,選擇資料夾時,自動選擇子節點不太好實現,因為QFileSystemModel是非同步載入,在載入之前rowCount( )總是返回0。可以通過QDirIterator來遍歷所有子節點,這樣雖然能實現功能,但有個缺點,會打亂檔案的排列順序。我沒找到好的解決辦法,所以如果檔案較少時,還是採用QDirModel。
CFileSystemModel.h
CFileSystemModel.cpp