Windows的资源管理器,大家很熟悉吧,可以放回上一级,查找到下一级.........Qt中QDir 类可以实现显示文件系统目录的效果。
笔者的机器环境:Windows8.1
看代码~~
fileview_widget.h
#ifndef FILEVIEWWIDGET_H #define FILEVIEWWIDGET_H #include <QWidget> #include <QDir> #include <QListWidgetItem> #include <QFileInfoList> #include <QListWidget> #include <QLineEdit> #include <QVBoxLayout> #include <QIcon> #include <QStringList> class FileViewWidget : public QWidget { Q_OBJECT public: FileViewWidget(QWidget *parent=0); //---用双击浏览器中显示的目录进入下一级,或者返回上一级目录。 void showFileInfoList(QFileInfoList list); public slots: //--显示当前目录下的所有文件 void slotShow(QDir dir); //----根据选择显示下一级目录下的文件, void slotDirShow(QListWidgetItem *Item); private: QLineEdit *fileLineEdit; QListWidget *fileListWidget; QVBoxLayout *vLayout; QFileInfoList list; }; #endif //FILEVIEWWIDGET_Hfileview_widget.cpp
#include "fileview_widget.h" #include<QTextCodec> FileViewWidget::FileViewWidget(QWidget *parent/*=0*/) :QWidget(parent) { //-----实例化对象 fileLineEdit = new QLineEdit("/", this); fileListWidget = new QListWidget(this); //---布局 vLayout = new QVBoxLayout(this); vLayout->addWidget(fileLineEdit); vLayout->addWidget(fileListWidget); //--设置对应信号与槽 connect(fileLineEdit, SIGNAL(returnPressed()), this, SLOT(slotDirShow(QDir))); connect(fileListWidget, SIGNAL(itemDoubleClicked(QListWidgetItem *)), this, SLOT(slotDirShow(QListWidgetItem*))); QString rootStr = "/"; QDir rootDir(rootStr); QStringList stringlist; stringlist << "*"; list = rootDir.entryInfoList(stringlist); showFileInfoList(list); //---显示布局 setLayout(vLayout); //----设置窗口属性 setWindowTitle("File View"); } //--显示当前目录下的所有文件 void FileViewWidget::slotShow(QDir dir) { QStringList stringList; stringList << "*"; QFileInfoList InfoList = dir.entryInfoList(stringList, QDir :: AllEntries, QDir :: DirsFirst); showFileInfoList(InfoList); } //---用双击浏览器中显示的目录进入下一级,或者返回上一级目录。 void FileViewWidget::showFileInfoList(QFileInfoList list) { //--清空列表控件 fileListWidget->clear(); //----取出所有项,按照目录,文件方式添加到控件内 for (unsigned int i = 0; i < list.count(); i++) { QFileInfo tmpFileInfo = list.at(i); if (tmpFileInfo.isDir()) { QIcon icon("dir.png"); QString fileName = tmpFileInfo.fileName(); QListWidgetItem*tmpListWidgetItem = new QListWidgetItem(icon, fileName); fileListWidget->addItem(tmpListWidgetItem); } else { QIcon icon("file.png"); QString fileName = tmpFileInfo.fileName(); QListWidgetItem*tmpListWidgetItem = new QListWidgetItem(icon, fileName); fileListWidget->addItem(tmpListWidgetItem); } } } //----根据用户的选择显示下一级目录下的文件, void FileViewWidget::slotDirShow(QListWidgetItem *Item) { //----保存下一级目录名 QString string = Item->text(); QDir dir; //----设置路径为当前目录路径 dir.setPath(fileLineEdit->text()); //-----重新设置路径 dir.cd(string); //----更新当前显示路径, 这里获取的是绝对路径 fileLineEdit->setText(dir.absolutePath()); //---显示当前文件目录下的所有文件 slotShow(dir); }main.cpp
#pragma once #include <QtWidgets/QApplication> #include "fileview_widget.h" int main(int argc, char *argv[]) { QApplication a(argc, argv); FileViewWidget win; win.show(); return a.exec(); }
这里笔者列出关于QDir::Filter 的过滤方式,信息来源:assistant
Constant Value Description QDir::Dirs 0x001 List directories that match the filters. QDir::AllDirs 0x400 List all directories; i.e. don't apply the filters to directory names. QDir::Files 0x002 List files. QDir::Drives 0x004 List disk drives (ignored under Unix). QDir::NoSymLinks 0x008 Do not list symbolic links (ignored by operating systems that don't support symbolic links). QDir::NoDotAndDotDot NoDot | NoDotDot Do not list the special entries "." and "..". QDir::NoDot 0x2000 Do not list the special entry ".". QDir::NoDotDot 0x4000 Do not list the special entry "..". QDir::AllEntries Dirs | Files | Drives List directories, files, drives and symlinks (this does not list broken symlinks unless you specify System). QDir::Readable 0x010 List files for which the application has read access. The Readable value needs to be combined with Dirs or Files. QDir::Writable 0x020 List files for which the application has write access. The Writable value needs to be combined with Dirs or Files. QDir::Executable 0x040 List files for which the application has execute access. The Executable value needs to be combined with Dirs or Files. QDir::Modified 0x080 Only list files that have been modified (ignored on Unix). QDir::Hidden 0x100 List hidden files (on Unix, files starting with a "."). QDir::System 0x200 List system files (on Unix, FIFOs, sockets and device files are included; on Windows, .lnk files are included) QDir::CaseSensitive 0x800 The filter should be case sensitive.