QT 資料夾過濾問題

2022-08-26 19:00:14 字數 1457 閱讀 6610

一、問題描述:

**示例如下

1 qtreeview *m_tree_view = new

qtreeview;

23 qfilesystemmodel *dirmodel = new

qfilesystemmodel;

4 dirmodel->setfilter(qdir::dirs |qdir::nodotanddotdot);

5 dirmodel->setrootpath(qdir::currentpath());

67 m_tree_view->setmodel(dirmodel);

89 qfilesystemmodel *filemodel = new

qfilesystemmodel;

10 filemodel->setfilter(qdir::files);

11 filemodel->setrootpath(qdir::currentpath());

1213 qsortfilterproxymodel *proxymodel = new

qsortfilterproxymodel;

14 proxymodel->setsourcemodel(filemodel);

1516 qlistview *m_list_view= new

qlistview;

17 m_list_view->setmodel(proxymodel);

為了使得m_tree_view只顯示資料夾列表,且m_list_view只顯示檔案列表。

讓m_tree_view的setmodel()函式都指向dirmodel, m_list_view的setmodel()函式指向proxymodel。 

然後讓m_tree_view雙擊時連線到on_tree_clicked()函式:

1

void

on_tree_clicked(qmodelindex index)

2

那麼執行時,第一次在m_tree_view上點選父目錄時,m_list_view只顯示父目錄下的檔案,而過濾掉子資料夾。

但如果在m_tree_view上雙擊父目錄下的任意乙個子資料夾,然後再雙擊父目錄,m_list_view就會顯示剛才點選的子資料夾和父目錄下所有的檔案,而沒有全部過濾掉資料夾。

二、原因:

filemodel->setrootpath(filepath) 會把filepath的index加入filemodel,而filter沒改變的情況下不會再次進行過濾,所以被執行過setrootpath的資料夾都顯示出來了。

三、解決辦法:

在on_tree_clicked()的最後加上這2句

filemodel->setfilter(qdir::nofilter);

filemodel->setfilter(qdir::files);

這樣就能使filemodel再次執行過濾。

git資料夾過大

在頻繁增刪改 commit之後,git檔案會出現過大的情況 這個時候需要徹底清理以前的歷史版本 也就是說只保留當前版本,不可能再回滾了 中心思想就是建立乙個新工程把現有 拷貝過去 建立新的工程,拷貝現有 git init建立新倉庫 git remote add origin url新增遠端倉庫位址 ...

因資料夾過深,顯示無法找到檔案而無法刪除。

今天想刪除node.js的資料夾,但因為資料夾太深了而無法刪除。上網找到了這個方法,測試可行。假如超長資料夾的路徑是d mis abc abc abc.1.把robocopy.exe可以複製到d mis 2.在d mis下新建乙個空的資料夾 t1 3.開始鍵 r,輸入cmd 4.更換碟符到d mis...

Qt 檔案管理 資料夾

1 建立資料夾 folder 是路徑,可以是絕對或相對路徑 bool pathhelper createdirectory qstring folder else 2刪除資料夾 bool pathhelper deldir const qstring name qdir dir path if di...