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_H  

 

//fileview_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.

 

posted on 2019-03-25 19:43  IT观察者  阅读(540)  评论(0编辑  收藏  举报