天天看點

Qt建立檔案浏覽器

Qt建立檔案浏覽器

文檔名稱 Qt建立檔案浏覽器
建立時間 2012-9-13
修改時間 2012-9-13
建立人 Baifx
簡介(收獲) QDir、QFileInfoList、QListWidget

一、綜述。

檔案系統的浏覽是檔案操作的一個常用功能。本執行個體實作一個檔案系統的浏覽功能,可以浏覽所有的檔案。在本執行個體中,使用者可以輕按兩下浏覽器中顯示的目錄進入某一級目錄,或單擊“..”傳回上一級目錄,頂部的編輯框顯示目前所在的目錄路徑,清單中顯示該目錄下的所有檔案。

       QDir類的entryInfoList()方法是按照某種過濾方式獲得目錄下的檔案清單,函數原型如下:

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

其中,參數nameFilters制定了檔案名的過濾方式,如“*”,“.tar.gz”;參數filters指定檔案屬性的過濾方式,如目錄、檔案、讀寫屬性等,QDir::Filter定義了一系列的過濾方式。

二、執行個體。

Qt建立檔案浏覽器

“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 );

}

c++

繼續閱讀