Chinaunix首页 | 论坛 | 博客
  • 博客访问: 915351
  • 博文数量: 40
  • 博客积分: 995
  • 博客等级: 准尉
  • 技术积分: 830
  • 用 户 组: 普通用户
  • 注册时间: 2011-05-10 11:09
个人简介

不知道自己是码农的二流码农!

文章分类

全部博文(40)

文章存档

2013年(4)

2012年(35)

2011年(1)

分类: C/C++

2012-09-13 15:37:25

Qt创建文件浏览器

文档名称

Qt创建文件浏览器

创建时间

2012-9-13

修改时间

2012-9-13

创建人

Baifx

简介(收获)

QDirQFileInfoListQListWidget

       一、综述。

       文件系统的浏览是文件操作的一个常用功能。本实例实现一个文件系统的浏览功能,可以浏览所有的文件。在本实例中,用户可以双击浏览器中显示的目录进入某一级目录,或单击“..”返回上一级目录,顶部的编辑框显示当前所在的目录路径,列表中显示该目录下的所有文件。

       QDir类的entryInfoList()方法是按照某种过滤方式获得目录下的文件列表,函数原型如下:

QFileInfoList QDir::entryInfoList( const QStringList & nameFilters, Filters filters = NoFilter, SortFlags sort = NoSotr ) const;

       其中,参数nameFilters制定了文件名的过滤方式,如“*”,“.tar.gz”;参数filters指定文件属性的过滤方式,如目录、文件、读写属性等,QDir::Filter定义了一系列的过滤方式。

 

       二、实例。

fileViewer.h”代码:

class fileViwer : public QDialog

{

       Q_OBJECT

 

public:

       fileViwer(QWidget *parent = 0, Qt::WFlags flags = 0);

       ~fileViwer();

 

protected slots:

       void slotShowDir( QListWidgetItem * item );     

 

private:

       void showFileInfoList( QFileInfoList list );

 

private:

       QLineEdit * pLineEditDir;

       QListWidget * pListWidgetFile;

};

 

fileViewer”代码:

fileViwer::fileViwer(QWidget *parent, Qt::WFlags flags)

       : QDialog(parent, flags)

{

       setWindowTitle( tr( "File Viewer" ) );

      

       pLineEditDir = new QLineEdit();

       pLineEditDir->setText( tr( "C:/" ) );

 

       pListWidgetFile = new QListWidget();

 

       QVBoxLayout * pVLayout = new QVBoxLayout( this );

       pVLayout->addWidget( pLineEditDir );

       pVLayout->addWidget( pListWidgetFile );

 

       connect( pListWidgetFile, SIGNAL( itemDoubleClicked( QListWidgetItem * ) ), this, SLOT( slotShowDir( QListWidgetItem * ) ) );

 

       QString root( "C://" );

       QDir rootDir( root );

       QStringList sList;

       sList << "*";

       QFileInfoList list = rootDir.entryInfoList( sList );

       showFileInfoList( list );

}

 

fileViwer::~fileViwer()

{

 

}

 

void fileViwer::showFileInfoList( QFileInfoList list )

{

       pListWidgetFile->clear();

       for ( unsigned int i = 0; i < list.count(); i++ )

       {

              QFileInfo tmpFileInfo = list.at( i );

 

              if ( tmpFileInfo.isDir() )

              {

                     QString fileName = tmpFileInfo.fileName();

                     QListWidgetItem * pTmp = new QListWidgetItem( QIcon( ".//Resources//dir.png" ), fileName );

                     pListWidgetFile->addItem( pTmp );

              }

              else

              {

                     QString fileName = tmpFileInfo.fileName();

                     QListWidgetItem * pTmp = new QListWidgetItem( QIcon( ".//Resources//file.png" ), fileName );

                     pListWidgetFile->addItem( pTmp );

              }

       }

}

 

void fileViwer::slotShowDir( QListWidgetItem * item )

{

       QString str = item->text();

       QDir dir;

       dir.setPath( pLineEditDir->text() );

       dir.cd( str );

       pLineEditDir->setText( dir.absolutePath() );

 

       QStringList string;

       string << "*";

 

       QFileInfoList list = dir.entryInfoList( string, QDir::AllEntries, QDir::DirsFirst );

       showFileInfoList( list );

}

阅读(9987) | 评论(0) | 转发(1) |
给主人留下些什么吧!~~