1. 程式人生 > >檔案管理系統 (關於QT的一些使用方法)

檔案管理系統 (關於QT的一些使用方法)

這個很早我就想寫了,一直拖啊拖,這篇部落格是為了保留QT的一些使用方法,以免以後在使用QT的時候沒有參照的程式碼

先貼一份QT的檔案結構

然後大概解釋一下 allhead代表所有的標頭檔案,creat_d好像建立資料夾,_f應該是檔案(反正一個資料夾一個檔案),然後就是開啟資料夾啊,開啟檔案,寫入檔案,返回上一級這些操作。

(Ps:可能有些檔案被我修改以後變的沒有意義了 ,由於時間太長,我也記不清楚用了多少,但是test開頭的肯定是用於測試一些方法的)

這裡是標頭檔案

allhead.h

#ifndef ALLHEAD_H
#define ALLHEAD_H


#include
<QString> #include<QMessageBox> #include <stdio.h> #include <QVector> extern QString noww; extern int pridee; extern int flag; struct File { QString name; char kind; int pride; int id; int fa; QString file; }; extern File q; extern int
sz,nowh; extern QVector<File> v; extern QVector<int>mp[1005]; extern QVector<File>op; #endif // ALLHEAD_H
View Code

closefile.h

#ifndef CLOSEFILE_H
#define CLOSEFILE_H
#define QT4_SUPPORT
#include <QWidget>
#include<testfunction.h>
#include<qdebug.h>
#include 
"allhead.h" namespace Ui { class closefile; } class closefile : public QWidget { Q_OBJECT public: explicit closefile(QWidget *parent = 0); ~closefile(); QString name; private slots: void on_lineEdit_cursorPositionChanged(); void on_pushButton_clicked(); private: Ui::closefile *ui; }; #endif // CLOSEFILE_H
View Code

creat_d.h

#ifndef CREAT_D_H
#define CREAT_D_H

#include <QWidget>
#include<QObject>
#include <QVector>
#include <QString>
#include <QApplication>
#include "allhead.h"
namespace Ui {
class creat_d;
}

class creat_d : public QWidget
{
    Q_OBJECT

public:
    explicit creat_d(QWidget *parent = 0);
    ~creat_d();

private slots:
    void on_lineEdit_cursorPositionChanged();

    void on_lineEdit_2_cursorPositionChanged();

    void on_pushButton_clicked();

private:
    Ui::creat_d *ui;
};

#endif // CREAT_D_H
View Code

creat_f.h

#ifndef CREAT_F_H
#define CREAT_F_H
#include<QObject>
#include <QWidget>
#include <QVector>
#include <QString>
#include <QApplication>
#include "allhead.h"

struct node
{
    QString name;
    int pride;
};
namespace Ui {
class creat_f;
}

class creat_f : public QWidget
{
    Q_OBJECT

public:
    explicit creat_f(QWidget *parent = 0);
    ~creat_f();
    QString name;
    int pride;
private slots:
    void on_lineEdit_cursorPositionChanged();

    void on_lineEdit_2_cursorPositionChanged();

    void on_ppp_clicked();

private:
    Ui::creat_f *ui;
};

#endif // CREAT_F_H
View Code

del.h

#ifndef DEL_H
#define DEL_H

#include <QWidget>
#include<QObject>
#include <QVector>
#include <QString>
#include <QApplication>
#include "allhead.h"
namespace Ui {
class del;
}

class del : public QWidget
{
    Q_OBJECT

public:
    explicit del(QWidget *parent = 0);
    ~del();
    QString name;

private slots:
    void on_lineEdit_cursorPositionChanged();

    void on_pushButton_clicked();

private:
    Ui::del *ui;
};

#endif // DEL_H
View Code

intopath.h

#ifndef INTOPATH_H
#define INTOPATH_H

#include <QWidget>
#include<QObject>
#include <QVector>
#include <QString>
#include <QApplication>
#include "allhead.h"
namespace Ui {
class intopath;
}

class intopath : public QWidget
{
    Q_OBJECT

public:
    explicit intopath(QWidget *parent = 0);
    ~intopath();
    QString name;

private slots:
    void on_lineEdit_cursorPositionChanged();

    void on_nnn_clicked();

private:
    Ui::intopath *ui;
};

#endif // INTOPATH_H
View Code

isfile.h

#ifndef ISFILE_H
#define ISFILE_H

#include <QWidget>
#include<QObject>
#include <QVector>
#include <QString>
#include <QApplication>
#include "allhead.h"
namespace Ui {
class Isfile;
}

class Isfile : public QWidget
{
    Q_OBJECT

public:
    explicit Isfile(QWidget *parent = 0);
    ~Isfile();

private:
    Ui::Isfile *ui;
};

#endif // ISFILE_H
View Code

mainwindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include<QObject>
#include <QMainWindow>
#include "creat_f.h"
#include "intopath.h"
#include "del.h"
#include <QVector>
#include <QString>
#include "openfile.h"
#include "closefile.h"
#include "rfile.h"
#include "wfile.h"
#include "wwfile.h"
#include "allhead.h"
#include <stdio.h>
#include "creat_d.h"
namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();

    creat_f *z;
    creat_d *d;
    intopath *path;
    del *DEL;
    openfile *open;
    closefile *close;
    rfile *rf;
    wfile *wf;
    wwfile *wwf;
private slots:
    void on_creat_clicked();

    void on_creat_ff_clicked();

    void on_pushButton_clicked();

    void on_index_clicked();

    void on_Back_clicked();

    void on_Del_clicked();

    void on_openfile_clicked();

    void on_closefile_clicked();

    void on_rfile_clicked();

    void on_wfile_clicked();

    void on_index_s_clicked();

private:
    Ui::MainWindow *ui;
};

#endif // MAINWINDOW_H
View Code

openfile.h

#ifndef OPENFILE_H
#define OPENFILE_H

#include <QWidget>
#include<QObject>
#include <QVector>
#include <QString>
#include <QApplication>
#include "allhead.h"
namespace Ui {
class openfile;
}

class openfile : public QWidget
{
    Q_OBJECT

public:
    explicit openfile(QWidget *parent = 0);
    ~openfile();
    QString name;
private slots:
    void on_lineEdit_cursorPositionChanged();

    void on_pushButton_clicked();

private:
    Ui::openfile *ui;
};

#endif // OPENFILE_H
View Code

rfile.h

#ifndef RFILE_H
#define RFILE_H

#include <QWidget>
#include<QObject>
#include <QVector>
#include <QString>
#include <QApplication>
#include "allhead.h"
namespace Ui {
class rfile;
}

class rfile : public QWidget
{
    Q_OBJECT

public:
    explicit rfile(QWidget *parent = 0);
    ~rfile();
    QString name;
private slots:
    void on_lineEdit_cursorPositionChanged();

    void on_pushButton_clicked();

private:
    Ui::rfile *ui;
};

#endif // RFILE_H
View Code

wfile.h

#ifndef WFILE_H
#define WFILE_H

#include <QWidget>
#include<QObject>
#include <QVector>
#include <QString>
#include <QApplication>
#include "allhead.h"
namespace Ui {
class wfile;
}

class wfile : public QWidget
{
    Q_OBJECT

public:
    explicit wfile(QWidget *parent = 0);
    ~wfile();
    QString name;
private slots:
    void on_lineEdit_cursorPositionChanged();

    void on_pushButton_clicked();

    void on_textEdit_destroyed();

private:
    Ui::wfile *ui;
};

#endif // WFILE_H
View Code

wwfile.h

#ifndef WWFILE_H
#define WWFILE_H

#include <QWidget>
#include<QObject>
#include <QVector>
#include <QString>
#include <QApplication>
#include "allhead.h"
namespace Ui {
class wwfile;
}

class wwfile : public QWidget
{
    Q_OBJECT

public:
    explicit wwfile(QWidget *parent = 0);
    ~wwfile();
    QString name;
private slots:
    void on_pushButton_clicked();

    void on_textEdit_destroyed();

private:
    Ui::wwfile *ui;
};

#endif // WWFILE_H
View Code

 

下面時候Sources

allhead.cpp

#include<iostream>
#include <stdio.h>
#include<allhead.h>
QString noww;
int pridee;
int flag;
File q;
int sz,nowh;
QVector<File> v;
QVector<int>mp[1005];
QVector<File>op;
View Code

closefile.cpp

#include "closefile.h"
#include "ui_closefile.h"

closefile::closefile(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::closefile)
{
    ui->setupUi(this);
}

closefile::~closefile()
{
    delete ui;
}

void closefile::on_lineEdit_cursorPositionChanged()
{
    noww=ui->lineEdit->text();
}

void closefile::on_pushButton_clicked()
{
   bool ok=true;
   for(int i=0;i<op.size();i++){
       if(op[i].name==noww&&op[i].fa==nowh){
           ok=false;break;
       }
   }
   QString tmp="";
   qDebug()<<"asd "<<ok<<endl;
   if(ok){
       QMessageBox::about(this,"關閉檔案","該檔案未開啟");
       this->close();
       return ;
   }
   QVector<File>::iterator it;
   for(it=op.begin();it!=op.end();it++){
       if(it->name==noww&&it->fa==nowh){
           op.erase(it);
           break;
       }
   }
   QMessageBox::about(this,"關閉檔案","檔案已關閉");
   this->close();
   return ;
}
View Code

creat_d.cpp

#include "creat_d.h"
#include "ui_creat_d.h"
#include <qDebug>
creat_d::creat_d(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::creat_d)
{
    ui->setupUi(this);
}

creat_d::~creat_d()
{
    delete ui;
}

void creat_d::on_lineEdit_cursorPositionChanged()
{
    noww=ui->lineEdit->text();
}

void creat_d::on_lineEdit_2_cursorPositionChanged()
{

}

void creat_d::on_pushButton_clicked()
{
    bool ok=true;
    for(int i=0;i<mp[nowh].size();i++){
        int as=mp[nowh][i];
        for(int j=0;j<v.size();j++){
            if(v[j].name==noww&&v[j].id==as){
                ok=false;
                break;
            }
        }
        if(!ok)break;
    }
    QString tmp="";
    if(!ok){
        QMessageBox::about(this,"新建檔案","此檔案或者目錄已經存在");
        this->close();
        return ;
    }

    q.name=noww;
    pridee=ui->lineEdit_2->text().toInt();
    q.id=++sz;
    q.kind='f';
    q.pride=pridee;
    qDebug()<<"sss "<<pridee<<endl;
    q.fa=nowh;
    mp[nowh].push_back(q.id);
    v.push_back(q);
    QMessageBox::about(this,"新建檔案","建立成功");
    this->close();
}
View Code

creat_f.cpp

#include "creat_f.h"
#include "ui_creat_f.h"
#include"mainwindow.h"
#include <qDebug>
#include "allhead.h"
#include <QString>

creat_f::creat_f(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::creat_f)
{
    ui->setupUi(this);
}

creat_f::~creat_f()
{
    delete ui;
}

void creat_f::on_lineEdit_cursorPositionChanged()
{

    noww=ui->lineEdit->text();
}

void creat_f::on_lineEdit_2_cursorPositionChanged()
{

}

void creat_f::on_ppp_clicked()
{
    bool ok=true;
    for(int i=0;i<mp[nowh].size();i++){
        int as=mp[nowh][i];
        for(int j=0;j<v.size();j++){
            if(v[j].name==noww&&v[j].id==as){
                ok=false;
                break;
            }
        }
        if(!ok)break;
    }
    QString tmp="";
    if(!ok){
        QMessageBox::about(this,"新建資料夾","此檔案或者目錄已經存在");
        this->close();
        return ;
    }
    q.name=noww;
    pridee=ui->lineEdit_2->text().toInt();
    q.id=++sz;
    q.kind='d';
    q.pride=pridee;
    q.fa=nowh;
    mp[nowh].push_back(q.id);
    v.push_back(q);
    QMessageBox::about(this,"新建資料夾","建立成功");
    this->close();
}
View Code

del.cpp

#include "del.h"
#include "ui_del.h"

del::del(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::del)
{
    ui->setupUi(this);
}

del::~del()
{
    delete ui;
}

void del::on_lineEdit_cursorPositionChanged()
{
    noww=ui->lineEdit->text();
}

void dfs(int x)
{
    for(int i=0;i<mp[x].size();i++){
        int as=mp[x][i];
        int k=-1;
        for(int j=0;j<v.size();j++){
            if(v[j].id==as&&v[j].kind=='d'){
                k=as;
                break;
            }
        }
        if(k!=-1)dfs(k);
    }
    mp[x].clear();
}
void del::on_pushButton_clicked()
{
    int k=-1;
    for(int i=0;i<v.size();i++){
        if(v[i].name==noww&&v[i].fa==nowh){
            k=v[i].id;break;
        }
    }
    QString tmp="";
    if(k==-1){
        QMessageBox::about(this,"刪除檔案","沒有此檔案");
        this->close();
        return ;
    }
    dfs(k);
    QVector<int>::iterator it;
    for(it=mp[nowh].begin();it!=mp[nowh].end();it++){
        int as=*it;
        bool ok=true;
        for(int j=0;j<v.size();j++){
            if(v[j].id==as&&v[j].name==noww){
                ok=false;
                break;
            }
        }
        if(!ok){
            mp[nowh].erase(it);
            return ;
        }
    }
    QMessageBox::about(this,"刪除檔案","刪除完畢");
    this->close();
}
View Code

intopath.cpp

#include "intopath.h"
#include "ui_intopath.h"

intopath::intopath(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::intopath)
{
    ui->setupUi(this);
}

intopath::~intopath()
{
    delete ui;
}

void intopath::on_lineEdit_cursorPositionChanged()
{
    noww=ui->lineEdit->text();
}

void intopath::on_nnn_clicked()
{
    bool ok=true;
    int k;
    for(int i=0;i<mp[nowh].size();i++){
        int as=mp[nowh][i];
        for(int j=0;j<v.size();j++){
            if(v[j].name==noww&&v[j].id==as){
                ok=false;k=as;break;
            }
        }
        if(!ok)break;
    }
    QString tmp="";
    if(ok){
        QMessageBox::about(this,"開啟資料夾","路徑輸入錯誤,請核對");
        this->close();
    }
    else{
        nowh=k;
        QMessageBox::about(this,"開啟資料夾","以開啟");
        this->close();
    }
}
View Code

isfile.cpp

#include "isfile.h"
#include "ui_isfile.h"

Isfile::Isfile(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Isfile)
{
    ui->setupUi(this);
}

Isfile::~Isfile()
{
    delete ui;
}
View Code

main.cpp

#include "mainwindow.h"
#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w;
    w.show();

    return a.exec();
}
View Code

mainwindow.cpp

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "creat_f.h"
#include "intopath.h"
#include "del.h"
#include "openfile.h"
#include "closefile.h"
#include "rfile.h"
#include "wfile.h"
#include "wwfile.h"
#include "iostream"
#include <QDebug>
#include "allhead.h"
using namespace std;


MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    sz=0;nowh=0;
    v.clear();
    op.clear();
    for(int i=0;i<1005;i++)mp[i].clear();
}

MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow::on_creat_clicked()
{
    z = new creat_f;
    z->setWindowTitle(tr("新建資料夾"));
    z->show();
}

void MainWindow::on_creat_ff_clicked()
{
    d = new creat_d;
    d->setWindowTitle(tr("新建檔案"));
    d->show();
}

void MainWindow::on_pushButton_clicked()
{
    path=new intopath;
    path->setWindowTitle(tr("開啟資料夾"));
    path->show();
}

void MainWindow::on_index_clicked()
{
    QString tmp="";
    tmp+="Name\tPride\tKind\tParent\n";
    for(int i=0;i<mp[nowh].size();i++){
        int as=mp[nowh][i];
        for(int j=0;j<v.size();j++){
            if(v[j].id==as){
                tmp+=v[j].name;tmp+="\t";
                tmp+=QString::number(v[j].pride);tmp+="\t";
                tmp+=v[j].kind;tmp+="\t";
                tmp+=QString::number(v[j].fa);tmp+="\n";
                break;
            }
        }
    }
    ui->com->setText(tmp);
}

void MainWindow::on_Back_clicked()
{
    QString ans="";
    if(nowh==0){
        ans+="Error:當前已為使用者根目錄,無法再回退\n";
        ui->com->setText(ans);
        return ;
    }
    int k;
    for(int i=0;i<v.size();i++){
        if(v[i].id==nowh){
            k=v[i].fa;break;
        }
    }
    nowh=k;
    ans+="返回完成";
    ui->com->setText(ans);
}


void MainWindow::on_Del_clicked()
{
    DEL=new del;
    DEL->setWindowTitle(tr("刪除檔案"));
    DEL->show();
}

void MainWindow::on_openfile_clicked()
{
    open=new openfile;
    open->setWindowTitle(tr("開啟檔案"));
    open->show();
}

void MainWindow::on_closefile_clicked()
{
    close=new closefile;
    close->setWindowTitle(tr("關閉檔案"));
    close->show();
}

void MainWindow::on_rfile_clicked()
{
    rf=new rfile;
    rf->setWindowTitle(tr("讀檔案"));
    rf->show();
}

void MainWindow::on_wfile_clicked()
{
    wf=new wfile;
    wf->setWindowTitle(tr("寫檔案"));
    wf->show();
}

void MainWindow::on_index_s_clicked()
{

    QString ans="";
    int cnt=0;
    QVector<File> xx;
    xx.clear();
    for(int i=0;i<v.size();i++){

        xx.push_back(v[i]);
    }
//    printf("檔名    索引號\n");
    ans+="檔名\t索引號\n";
    for(int i=0;i<xx.size();i++){
//        cout<<index[i].first.name;
//        printf("                     %d\n",index[i].second);
        ans+=xx[i].name;ans+='\t';
        ans+=QString::number(i+1);
        ans+='\n';
    }
    ui->com->setText(ans);
}
View Code

openfile.cpp

#include "openfile.h"
#include "ui_openfile.h"

openfile::openfile(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::openfile)
{
    ui->setupUi(this);
}

openfile::~openfile()
{
    delete ui;
}

void openfile::on_lineEdit_cursorPositionChanged()
{
    noww=ui->lineEdit->text();
}

void openfile::on_pushButton_clicked()
{
    int ok=true;
    for(int i=0;i<op.size();i++){
        if(op[i].name==noww&&op[i].id==nowh){
            ok=false;
            return ;
        }
    }
    QString tmp="";
    if(!ok){
        QMessageBox::about(this,"開啟檔案","該檔案已被開啟");
        this->close();
        return ;
    }
    int k=-1;
    for(int i=0;i<v.size();i++){
        if(v[i].name==noww&&v[i].fa==nowh){
            k=v[i].id;
            op.push_back(v[i]);
            break;
        }
    }
    if(k==-1){
        QMessageBox::about(this,"開啟檔案","沒有此檔案");
        this->close();
    }
    else{
        QMessageBox::about(this,"開啟檔案","檔案開啟");
        this->close();
    }
}
View Code

rfile.cpp

#include "rfile.h"
#include "ui_rfile.h"

rfile::rfile(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::rfile)
{
    ui->setupUi(this);
}

rfile::~rfile()
{
    delete ui;
}

void rfile::on_lineEdit_cursorPositionChanged()
{
    noww=ui->lineEdit->text();
}

void rfile::on_pushButton_clicked()
{
    bool ok=true;
    int s;
    for(int i=0;i<op.size();i++){
        if(op[i].name==noww&&op[i].fa==nowh){
            ok=false;s=op[i].pride;break;
        }
    }
    QString tmp="";
    if(ok){
//        tmp+="該檔案尚未開啟";
//        ui->com->setText(tmp);
        QMessageBox::about(this,"讀檔案","該檔案尚未開啟");
        this->close();
        return;
    }
    int k;
    for(int i=0;i<v.size();i++){
        if(v[i].name==noww&&v[i].fa==nowh){
            k=i;
            break;
        }
    }
//    ui->com->setText(v[k].file);
    QMessageBox::about(this,v[k].name,v[k].file);
    this->close();
}
View Code

wfile.cpp

#include "wfile.h"
#include "ui_wfile.h"
#include <qDebug>
wfile::wfile(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::wfile)
{
    ui->setupUi(this);
}

wfile::~wfile()
{
    delete ui;
}

void wfile::on_lineEdit_cursorPositionChanged()
{
    noww=ui->lineEdit->text();
}

void wfile::on_pushButton_clicked()
{
    bool ok=true;
    int s;
    for(int i=0;i<op.size();i++){
        if(op[i].name==noww&&op[i].fa==nowh){
            ok=false;s=op[i].pride;break;
        }
    }
    if(ok){
        QMessageBox::about(this,"寫檔案","該檔案未被開啟");
        this->close();
        return;
    }
    QString la;
    la=ui->textEdit->toPlainText();
//    qDebug()<<"qwe "<<noww<<endl;
    int k;
//    int zzz=1;
    for(int i=0;i<v.size();i++){
        if(v[i].name==noww&&v[i].fa==nowh){
            k=i;
            break;
        }
    }
    qDebug()<<"aaa "<<s<<endl;
    if(s==0){
        QMessageBox::about(this,"寫檔案","檔案沒有寫許可權");
        this->close();
        return ;
    }
    for(int i=0;i<v.size();i++){
        if(v[i].name==noww&&v[i].fa==nowh){
            v[i].file+=la;
        }
    }
//    v[k].file+=noww;
    QMessageBox::about(this,"寫檔案","寫入完成");
    this->close();
}

void wfile::on_textEdit_destroyed()
{

}
View Code

wwfile.cpp

#include "wwfile.h"
#include "ui_wwfile.h"

wwfile::wwfile(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::wwfile)
{
    ui->setupUi(this);
}

wwfile::~wwfile()
{
    delete ui;
}

void wwfile::on_pushButton_clicked()
{
//    int k;
//    for(int i=0;i<v.size();i++){
//        if(v[i].name==noww&&v[i].fa==nowh){
//            k=i;
//            break;
//        }
//    }
//    v[k].file+=noww;
//    QMessageBox::about(this,"寫檔案","寫入完成");
//    this->close();
}

void wwfile::on_textEdit_destroyed()
{
//    noww=ui->textEdit->toPlainText();
}
View Code