您的位置:首页 > 编程语言 > Qt开发

QT获取文件或文件夹操作

2014-11-03 09:13 344 查看
本人用到的实现选择多个文件的方法

1. 实现一次读取多个文件操作代码:

 QList<QString> FilesList

int i;

QStringList    fileNameList;


fileNameList = QFileDialog::getOpenFileNames(this,tr("choose files"),tr("D:\\"),"",0,0);


if(fileNameList.count()<=0)

{

QMessageBox::warning(this,tr("warning"), "choose no file!",QMessageBox::Yes);

return ;

}


for(i=0;i<fileNameList.count();i++)

{

if(!FilesList.contains((fileNameList[i])))

FilesList.append(fileNameList[i]);

}


QMessageBox::warning(this,tr("warning"), QString::number(FilesList.count(),10),QMessageBox::Yes);


2. 实现从文件夹中读取文件操作代码:

QString path;

int i;

QStringList filter;

QDir *dir;

QList<QFileInfo> *fileInfo;

QFileDialog* openFilePath;



path=tr("");

openFilePath = new QFileDialog( this, "choose a directory", "file");

openFilePath-> setFileMode( QFileDialog::DirectoryOnly);

if ( openFilePath->exec() == QDialog::Accepted )

{

path=openFilePath->selectedFiles()[0];

}

delete openFilePath;


if(!path.compare(""))

{

QMessageBox::warning(this,tr("warning"), tr("you have choose no directory"),QMessageBox::Yes);

return;

}

else

QMessageBox::warning(this,tr("warning"), path,QMessageBox::Yes);


if(HasReadDirList.contains(path))

{

QMessageBox::warning(this,tr("warning"), tr("you have read this directory!"),QMessageBox::Yes);

return;

}

HasReadDirList.append(path);


dir=new QDir(path);

if(!dir->exists())

{

QMessageBox::warning(this,tr("warning"), "directory doesn't exist!",QMessageBox::Yes);

return ;

}

filter<<"*.*";

dir->setNameFilters(filter);

dir->setFilter(QDir::Files|QDir::NoSymLinks);


fileInfo =new QList<QFileInfo>(dir->entryInfoList(filter));



if(fileInfo->count()<=0)

{

QMessageBox::warning(this,tr("warning"), "there is no files!",QMessageBox::Yes);

return ;

}


for(i=0;i<fileInfo->count();i++)

FilesList.append(fileInfo->at(i).filePath());//包含文件名


他人总结:================================================================================================

一: 

Qstring fileName = QFileDialog::getOpenFileName(this, tr("open file"), " ",  tr("Allfile(*.*);;mp3file(*.mp3)"));  

说明:这样就会产生一个对话框,和系统的资源管理器差不多的。返回的是你选择文件的 绝对路径。

参数1:父窗口

参数2:对话框的标题

参数3:默认的打开的位置,如”我的文档“等

参数4:文件的过滤器,注意文件类型之间用  ;;  分开

二:

QStringList    fileNameList;

QString fileName0; 

QFileDialog* fd = new QFileDialog(this);//创建对话框

fd->resize(240,320);    //设置显示的大小

fd->setFilter( "Allfile(*.*);;mp3file(*.mp3);;wmafile(*.wma);;wavefile(*.wav)"); //设置文件过滤器

fd->setViewMode(QFileDialog::List);  //设置浏览模式,有 列表(list) 模式和 详细信息(detail)两种方式

if ( fd->exec() == QDialog::Accepted )   //如果成功的执行

{

fileName0 = fd->selectedFiles();      //返回文件列表的名称

fileName = fileNameList[0];            //取第一个文件名

}

else

fd->close();

资料来源于Qt官方文档,我总结了其中常用到的部分:

一.  最简单的方法是调用静态函数来对话框获取文件:

  QString file = QFileDialog::getOpenFileName(

                    "/home/foxman",

                    "Images (*.png *.xpm *.jpg)",

                    this);

     这断代码可以建立一个取文件对话框,选择后OK将文件路径返回给file.

         

二. 一般的文件对话框的使用

  QFileDialog *fd=new QFileDialog(this,"file dlg",TRUE);

    if(fd->exec()==QFileDialog::Accepted) // ok

    {

       QString file=fd->selectedFile();

      qWarning(s);

    }

  1. 几个设定选项:

   a. 设定显示模式

     fd->setViewMode( QFileDialog::Detail );

     //Detail显示 详细的文件日期大小, List为一般情况

   b. 设定过滤器

      fd->setFilter( "Images (*.png *.xpm *.jpg)" ); 

     下面是设定多个过滤器,一定要以;;隔开(两个分号)

     QString filters="C file(*.c *.cpp *.h);;pic(*.png *.xpm)"; 

     fd->setFilters(filters);

  c.  设定对话框返回什么 

    fd->setMode( QFileDialog::ExistingFile ); 

    AnyFile(一般用于save as对话框)

   ExistingFile存在的一个文件

   ExistingFiles存在的0个或多个文件(可用于选择多个文件)

   Directory返回目录

   DirectoryOnly返回目录(选取文件的时候只选中目录)  

 

  2. 返回值:

     a. 返回选择中的一个文件(夹)名字

        QString s=fd->selectedFile(); 

     b. 选取多个文件(一定要设定ExistingFiles模式)

         QStringList slist=fd->selectedFiles();    

               for(QStringList::Iterator it=slist.begin();it!=slist.end();it++) //迭代器

                 qWarning(*it);

附: 字符串列表QStringList使用方法

 1. 可以以append、+、<< 方式添加元素

    QStringList slist;

    slist.append("string1");

    slist += "string2";

    slist << "string3" << "string4";

2.迭代器取得每一个变量值 

       for(QStringList::Iterator it=slist.begin();it!=slist.end();it++)  qWarning(*it);

3. 一种使用方式

    QString s = "Red\tGreen\tBlue";

     QStringList colors = QStringList::split( "\t", s );

     cout << colors.join( ", " ) << endl;

     输出:   Red, Green, Blue

他人总结:
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐