新建QtGUI应用,基于QDialog,取消界面创建
#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 = "/";
QDir rootDir(root);
QStringList string;
string << "*";
QFileInfoList list = rootDir.entryInfoList(string);
showFileInfoList(list);
}
Dialog::~Dialog()
{
}
//显示dir下的所有文件
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(); //将下一级的目录名保存在str中
QDir dir;
dir.setPath(fileLineEdit->text());//设置QDir对象的路径为当前目录路径
dir.cd(str);//切换路径
fileLineEdit->setText(dir.absolutePath());//刷新当前的目录路径
slotShow(dir);
}
entryInfoList按照某种过滤方式获取目录下的文件列表