淺談Qt做文件瀏覽器
Qt做文件瀏覽器項目要求做一個文件瀏覽器,要求文件以列表形式顯示,當單擊某個目錄時,就會進入下層目錄,用Qt實現。
方法1:用QFileSystemModel或是QDir做model,QTableView做為顯示的view。
采取這種方法的好處是:QFileSystemModel和QDir能自動的讀取出當前目錄下的文件信息。包括文件的大小,類型等,只要做如下設置就可以將當前目錄下的文件列表顯示出來。
p_mTVFileList->setRootIndex(dirmodel->setRootPath(filename)); //QTableView設置當前的根目錄
要查看view中某個文件或文件夾的信息的時候,只需要知道這個文件所處的index,如下
dirmodell->fileInfo(p_mTVFileList->currentIndex()); //查看當前文件的文件信息
但是QFileSystemModel和QDir里的顯示都是英文的??梢酝ㄟ^重寫QFileSystemModel的headerdata將表頭變成中文,但是里面顯示的文件信息的中文信息還不知道怎樣變成中文。
方法二:用QListWidget與QDir的entryInfoList實現。entryInfoList的功能比較強大。可以篩選性的讀出目錄下的文件信息
這種方法的實現原理是,用entryInfoList讀出文件列表。將文件列表里的內容作為QListWidgetItem一項項的顯示在QListWidget上,并記住當前的目錄,當點擊list的某一項時,通過item->text()獲取文件名,從而又通過entryInfoList進入下一級目錄,用這種方法只能顯示一列
方法三:用QStandardItemModel與QTableView實現,用QDir的entryInfoList獲取文件信息,將獲取到數據一步步的填到model中進行顯示。
當點擊某項之后,通過index.sibling(index.row(),0).data().toString()獲取這一行某列的數據,得到文件名
方法四:用Dir的entryInfoList遍歷整個的文件夾,將遍歷到的結果放在一個QList里面,QList里放的是文件的一些信息,如下
- typedef struct DirNode
- {
- char filename[200];
- bool isDir;
- long parent;
- long child;
- long next;
- }DirNode, *PDirNode;
將各個文件文件夾用地址串起來,成一個鏈表
各個的代碼如下:
/Files/chenxuelian/用鏈表實現的filenode.rar
/Files/chenxuelian/QFileSystemModel實現的fileview.rar
/Files/chenxuelian/普通model和tableview的fileview.rar
/Files/chenxuelian/QListWidget實現的fileview.rar
【編輯推薦】