QT获取文件或文件夹操作

本人用到的实现选择多个文件的方法
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

他人总结:
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值