天天看點

Qt實作檔案管理器

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();  
}  
           

 下面是運作結果

Qt實作檔案管理器

這裡筆者列出關于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.
           

繼續閱讀