Qt加载磁盘文件和对文件内容进行过滤

来源:互联网 发布:李谷一 知乎 编辑:程序博客网 时间:2024/05/16 12:16

一:关键函数

1,QDir file(path);  //当前文件路径

2,QStringList fileList=file.entryList();//获得进入目录的文件列表

3,qApp->applicationDirPath();//当前程序的目录

4,QDir::setCurrent(path);  //设置当前的目录

二,实例代码

1,头文件

#ifndef LOADFILEFORM_H
#define LOADFILEFORM_H
#include <QWidget>
#include <QDebug>
//设置页面的背景
#include <QPaintEvent>
#include <QPainter>
#include <QPen>
#include <QPixmap>
//加载文件所需的函数
#include <QStringList>
#include <QFile>
#include <QFileInfoList>   //文件信息列表
#include <QDir>  //文件路径
//显示文件列表
#include <QListWidgetItem>
#include <QStringList>
#include <QMessageBox>
#define UDISK "./file/udisk/"  //U盘路径
#define LOCALFILEDIR "./file/local/"    //本地文件路径
//编辑窗口申明
namespace Ui {
class LoadFileForm;
}
class LoadFileForm : public QWidget
{
    Q_OBJECT
    
public:
    explicit LoadFileForm(QWidget *parent = 0);
    ~LoadFileForm();
protected:
    void paintEvent(QPaintEvent *event);
    
private slots:
    void on_LocalContents_clicked();
    void on_UContents_clicked();
    void on_buttonYes_clicked();
    void on_buttonCancel_clicked();
    void on_fileContents_currentTextChanged(const QString &currentText);
private:
    Ui::LoadFileForm *ui;
    bool onlyShowBmp;  //只显示Bmp文件
    void initLoadFileForm(); //初始化
    QString currentFile;
public:
    void setShowBmp(); //设置图片
    QString fileFilter;  //文件过滤器,显示特定的文件
    void setFileFileter(QString filter);
signals:
    void buttonYesClickedBackToOneinterface();  //确定键按下发出信号
    void buttonCancelClickedBackToOneinterface();//取消键按下发出信号
    void currentFileName(QString fileName); //发送当前的文件名
    void goBackToEditForm(); //返回到编辑界面
private:
    bool isRemoveFile;
//删除文件设置函数
public:
    void removeFile();
};
#endif // LOADFILEFORM_H

2,源文件

#include "loadfileform.h"
#include "ui_loadfileform.h"
LoadFileForm::LoadFileForm(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::LoadFileForm)
{
    ui->setupUi(this);
    initLoadFileForm();
}
//初始化函数
void LoadFileForm::initLoadFileForm()
{
    //设置不显示边框
    this->setWindowFlags(Qt::FramelessWindowHint);
    update();  //初始化界面
    onlyShowBmp=false;  //只显示Bmp标志位为假
    //打开本地文件
    on_LocalContents_clicked();
    //是否删除文件设置为假
    isRemoveFile=false;
    //初始化为显示所有的文件
    fileFilter="all";
}
//页面初始化函数
void LoadFileForm::paintEvent(QPaintEvent *event)
{
    QPainter painter(this);
    QPen pen;
    painter.setPen(pen);
    painter.drawPixmap(0,0,this->width(),this->height(),QPixmap("./imag/1background.png"));
}
LoadFileForm::~LoadFileForm()
{
    delete ui;
}
//过滤需要打开的特定文件
void LoadFileForm::setFileFileter(QString filter)
{
     fileFilter=filter; //设置文件的过滤器
    //默认打开本地目录
    on_LocalContents_clicked();
}
//打开本地目录按钮
void LoadFileForm::on_LocalContents_clicked()
{
      qDebug()<<"本地";
    currentFile=LOCALFILEDIR;    //当前文件路径
    ui->fileContents->clear();  //清楚显示框的内容
    QDir file(LOCALFILEDIR);    //打开本地文件路径
    QStringList fileList=file.entryList();   //获得进入目录的文件列表
    //获得文件列表
    int i=0;
    while(i<fileList.size())  //文件列表有多少项,就循环多少次
    {
        if(fileList.at(i)=="."|fileList.at(i)=="..")  //无效文件名
        {
            i++;
            continue;
        }
        if(onlyShowBmp)
        {
            //有需要的文件就添加否则不添加
            if(fileList.at(i).contains(".bmp"))
            {
                qDebug()<<"bmp";
              //新建文件项目
             QListWidgetItem *item=new QListWidgetItem;
             item->setText(fileList.at(i));   //将该文件信息添加到项目
             ui->fileContents->addItem(item);
             i++;
             continue;
            }
            else
            {
              //没有Bmp文件  则跳过
               i++;
              continue;
            }
        }
        //过滤显示的文件
        if(fileFilter=="all")
        {
            //显示所有文件
            QListWidgetItem *item=new QListWidgetItem;
            item->setText(fileList.at(i));   //将该文件信息添加到项目
            ui->fileContents->addItem(item);
            i++;
        }
        else if(fileFilter=="txt")
        {
            //显示文本文件
            //有需要的文件就添加否则不添加
            if(fileList.at(i).contains(".txt"))
            {
                QListWidgetItem *item=new QListWidgetItem;
                item->setText(fileList.at(i));   //将该文件信息添加到项目
                ui->fileContents->addItem(item);
                i++;
                continue;
            }
            else
            {
                //没有txt文件  则跳过
                i++;
                continue;
            }
        }
        else
        {
            i++;
        }
    }
}
//打开U盘目录按钮
void LoadFileForm::on_UContents_clicked()
{
    qDebug()<<"移动";
    currentFile=UDISK;   //当前文件路径
    ui->fileContents->clear();  //清楚显示框的内容
    QDir file(UDISK);    //打开本地文件路径
    QStringList fileList=file.entryList();   //获得进入目录的文件列表
    //获得文件列表
    int i=0;
    while(i<fileList.size())  //文件列表有多少项,就循环多少次
    {
        if(fileList.at(i)=="."|fileList.at(i)=="..")  //无效文件名
        {
            i++;
            continue;
        }
        if(onlyShowBmp)
        {
            //有需要的文件就添加否则不添加
            if(fileList.at(i).contains(".bmp"))
            {
                qDebug()<<"bmp";
              //新建文件项目
             QListWidgetItem *item=new QListWidgetItem;
             item->setText(fileList.at(i));   //将该文件信息添加到项目
             ui->fileContents->addItem(item);
             i++;
             continue;
            }
            else
            {
              //没有Bmp文件  则跳过
               i++;
              continue;
            }
        }
        //过滤显示的文件
        if(fileFilter=="all")
        {
            //显示所有文件
            QListWidgetItem *item=new QListWidgetItem;
            item->setText(fileList.at(i));   //将该文件信息添加到项目
            ui->fileContents->addItem(item);
            i++;
        }
        else if(fileFilter=="txt")
        {
            //显示文本文件
            //有需要的文件就添加否则不添加
            if(fileList.at(i).contains(".txt"))
            {
                QListWidgetItem *item=new QListWidgetItem;
                item->setText(fileList.at(i));   //将该文件信息添加到项目
                ui->fileContents->addItem(item);
                i++;
                continue;
            }
            else
            {
                //没有txt文件  则跳过
                i++;
                continue;
            }
        }
        else
        {
            i++;
        }
    }
}
//确定按钮
void LoadFileForm::on_buttonYes_clicked()
{
    onlyShowBmp=false;  //只显示Bmp标志位为假
    //当前选中的位空的话
    //没有选中任何一项
    if(ui->fileContents->selectedItems().size()==0)
    {
        //弹出警告窗口并且得到返回值
        if(QMessageBox::Yes==QMessageBox::warning(this,tr("警告"),tr("没有选中任何文件,是否返回"),QMessageBox::Yes,QMessageBox::Cancel))
        {
            //确定返回
            emit buttonYesClickedBackToOneinterface();//确定键的信号
            emit currentFileName(currentFile);  //发送当前选中的文件
            this->hide(); //隐藏本窗口
            return ;  //没有选中文件,不发送文件名
        }
        else
        {
            //留在本窗口
            on_LocalContents_clicked();
            return;
        }
    }
    //当前选中的不为空
    currentFile=currentFile+ui->fileContents->currentItem()->text();  //得到当前选中的内容
    if(isRemoveFile)
    {
        //删除当前的文件操作
        isRemoveFile=false;
        QFile::remove(currentFile);
        emit goBackToEditForm();
    }
    else
    {
          emit currentFileName(currentFile);  //发送当前选中的文件
    }
    //保存当前进入的路径
    QStringList t=currentFile.split("/");
    currentFile=t[0]+"/"+t[1]+"/"+t[2]+"/";
    this->hide();  //隐藏本窗口
}
//取消按钮
void LoadFileForm::on_buttonCancel_clicked()
{
    onlyShowBmp=false;  //只显示Bmp标志位为假
    emit buttonCancelClickedBackToOneinterface();//取消的信号
    emit goBackToEditForm();
    this->hide();  //隐藏本窗口
}
//当前文本改变
void LoadFileForm::on_fileContents_currentTextChanged(const QString &currentText)
{
    qDebug()<<currentText;
}
void LoadFileForm::setShowBmp()
{
    //设置只显示Bmp图片文件
    onlyShowBmp=true;
    on_LocalContents_clicked();
}
//删除文件函数
void LoadFileForm::removeFile()
{
  isRemoveFile=true;
}
博文索引  持续更新中。。。

原创粉丝点击