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.