一、首先在建立的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); }
五、实现效果(双击文件夹则进入,双击普通文件则打开)