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定義了一系列的過濾方式。
二、執行個體。

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