一、問題描述:
**示例如下
1 qtreeview *m_tree_view = newqtreeview;
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()函式:
1void
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...