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