Qt:文件系统浏览实例(QDir、QFileInfoList、QListWidgetItem)
Qt,文件系统浏览,QDir,QFileInfoList,QListWidgetItem2016-06-23
文件系统的浏览是目录操作的一个常用功能,下面通过程序,实现一个能够显示所有文件的浏览功能。
讲一讲如何使用QDir类以及各种过滤方式显示文件列表。
工程名默认即可,基类为QDialog。
在“dialog.h”文件中添加如下代码:
#ifndef DIALOG_H #define DIALOG_H #include <QDialog> #include <QFileInfoList> #include <QListWidgetItem> #include <QDir> #include <QVBoxLayout> #include <QLineEdit> class Dialog : public QDialog { Q_OBJECT public: Dialog(QWidget *parent = 0); ~Dialog(); void showFileInfoList(QFileInfoList list); public slots: void slotShow(QDir dir); void slotDirShow(QListWidgetItem *item); private: QLineEdit *fileLineEdit; QListWidget *fileListWidget; QVBoxLayout *mainLayout; }; #endif // DIALOG_H
添加如下代码:
#include "dialog.h" Dialog::Dialog(QWidget *parent) : QDialog(parent) { setWindowTitle(tr("File View")); fileLineEdit = new QLineEdit(tr("/")); fileListWidget = new QListWidget; mainLayout = new QVBoxLayout(this); mainLayout->addWidget(fileLineEdit); mainLayout->addWidget(fileListWidget); connect(fileLineEdit,SIGNAL(returnPressed()),this,SLOT(slotShow(QDir))); connect(fileListWidget,SIGNAL(itemDoubleClicked(QListWidgetItem*)), this,SLOT(slotDirShow(QListWidgetItem*))); QString root = "C:"; //可以更改盘符 QDir rootDir(root); QStringList string; string<<"*"; QFileInfoList list = rootDir.entryInfoList(string); showFileInfoList(list); } Dialog::~Dialog() { } void Dialog::slotShow(QDir dir) { QStringList string; string<<"*"; QFileInfoList list = dir.entryInfoList(string, QDir::AllEntries , QDir::DirsFirst); showFileInfoList(list); } void Dialog::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 *tmp = new QListWidgetItem(icon, fileName); fileListWidget->addItem(tmp); } else if(tmpFileInfo.isFile()) { QIcon icon("file.png"); QString fileName = tmpFileInfo.fileName(); QListWidgetItem *tmp = new QListWidgetItem(icon, fileName); fileListWidget->addItem(tmp); } } } void Dialog::slotDirShow(QListWidgetItem *item) { QString str = item->text(); QDir dir; dir.setPath(fileLineEdit->text()); dir.cd(str); fileLineEdit->setText(dir.absolutePath()); slotShow(dir); }
运行效果前文所示。
1、QFileInfoList QDir::entryInfoList(const QStringList & nameFilters, Filters filters = NoFilter, SortFlags sort = NoSort) const
此函数的返回值是一个QFileInfoList对象,包含当前目录下的所有文件和子目录。
参数一:指定文件名的过滤方式。
参数二:指定文件属性的过滤方式。如目录、文件、读写属性等。
enum QDir::Filter的取值如下:
参数三:指定列表的排序方式。如:按文件大小、文件类型、文件名称等。