一、首先在建立的Qt工程的.h文件中添加我們需要的頭文件
#include <QDir> #include <QFileInfoList> #inlcude <QFileInfo> #include <QProcess>
二、添加所需的私有槽函數、私有成員
void showFileInfoList(QFileInfoList list); //根據獲取的QFileInfoList顯示本地目錄 void slotDirShow(QListWidgetItem *item); //由雙擊的文件確定新的目錄 void slotShow(QDir dir); //由新的目錄調用showFileInfoList顯示 private: QString myPath; //記錄文件當前路徑
三、在構造函數中確定初始目錄,並調用顯示
myPath = "D:"; QDir dir(myPath); QFileInfoList list; list = dir.entryInfoList(); showFileInfoList(list);
連接對應槽函數(鼠標雙擊事件)
connect(ui->listWidget,SIGNAL(itemDoubleClicked(QListWidgetItem*)), this,SLOT(slotDirShow(QListWidgetItem*)));
四、實現對應的函數
void MainWindow::showFileInfoList(QFileInfoList list) { ui->listWidget->clear(); for(int i=0; i<list.count() ;i++) { QFileInfo tmpFileInfo = list.at(i); if(tmpFileInfo.isDir()) //為目錄則添加文件夾圖標及對應文件名 { QIcon icon(":/1.jpg"); QString fileName = tmpFileInfo.fileName(); QListWidgetItem *tmp = new QListWidgetItem(icon, fileName); ui->listWidget->addItem(tmp); } else if(tmpFileInfo.isFile()) //為普通文件則添加普通文件圖標及對應文件名 { QIcon icon(":/2.jpg"); QString fileName = tmpFileInfo.fileName(); QListWidgetItem *tmp = new QListWidgetItem(icon, fileName); ui->listWidget->addItem(tmp); } } } void MainWindow::slotShow(QDir dir) { QFileInfoList list = dir.entryInfoList(); showFileInfoList(list); } //鼠標雙擊觸發,接受item參數 void MainWindow::slotDirShow(QListWidgetItem *item) { QString str = item->text(); QDir dir; dir.setPath(myPath); if(!dir.cd(str)) //如果進入失敗,則為普通文件,創建新的進程打開對應文件 { QStringList arguments; QString start_path = myPath+"\\" + str; arguments << "/c" << start_path; QProcess* process = new QProcess; qDebug() << start_path << endl; process->start("cmd.exe",arguments); //開啟新進程打開文件 return; } myPath = dir.absolutePath(); //更新路徑 slotShow(dir); }
五、實現效果(雙擊文件夾則進入,雙擊普通文件則打開)