Qt加載磁盤文件和對文件內容進行過濾

一:關鍵函數

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;
}
博文索引  持續更新中。。。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章