mysql云盘,支持上传下载删除(qt+mysql)

 演示画面

用qt+mysql做了一个类似于网盘的小项目,支持上传、下载、删除,

没有什么技术含量,主要做了一个界面,练练手不错,后面也可以做复杂一点,比如下载队列,用到一些其它的方法,这个项目还是一开始看黑马的云盘项目想到的,但是他那个用到技术有点多,就想着能不能搞一个基于mysql的云盘项目,这个项目就很简单了,只要在mysql里面建一个表,然后连上去就可以运行了。

整体框架:

项目大致可以分为四个模块:

1,主界面

由一个Qtabview构成,在里面添加文件按钮(button_object)和上传(button_object)按钮,接受button_object和button_upload发出的信号并进行处理,同时利用mysql_db对象对数据库进行操作。

2,文件按钮(button_object)

封装的一个按钮,继承QToolbutton,在此基础上设置样式,发出文件的删除和下载信号

3,上传按键(button_upload)

和文件按钮一样,继承QToolbutton,本来是想用一个button_object实现的,但是一想两个按钮的响应方式不一样,干脆新写一个来的方便。主要发出文件上传的信号。

4,数据库类(mysql_db)

封装了mysql操作,包括增删改查,qt连接mysql通过一个ODBC来链接的,直接连有点麻烦。。

参考:QT连接Mysql数据库(详细成功版)_qt mysql_程序有序的博客-CSDN博客

 

建表:

CREATE TABLE files (
  id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
  file_name VARCHAR(20) NOT NULL,
  file_type VARCHAR(20) NOT NULL,
  file_size BIGINT UNSIGNED NOT NULL CHECK (file_size >= 0),
  file_content LONGBLOB
);

链接数据库部分:

db = QSqlDatabase::addDatabase("QODBC");
    db.setHostName("127.0.0.1");
    db.setPort(3306);
    db.setDatabaseName("file_test_db");     //QODBC里面创建的数据库名,每一个数据库对应Mysql里面的数据库
    db.setUserName("root");
    db.setPassword("root");
    bool ok = db.open();
    if (ok){

        qDebug()<<"success!";
    }
    else {
        qDebug()<<"error open database because"<<db.lastError();
    }

Qtabview设置部分:

//初始化表格
void main_table::init()
{
    m_row = 0;
    m_col = 0;
    //模型初始化
    if(model != nullptr)
    {
        // 清空数据模型中的行数
        model->removeRows(0, model->rowCount());
        // 更新视图
        ui->tableView->setModel(Q_NULLPTR);
        ui->tableView->reset();
        ui->tableView->update();

        delete model;
    }



    model = new QStandardItemModel();

    model->setColumnCount(MAX_COL_NUM);     //设置最大列数


    //为表格控件设置数据模型
    ui->tableView->setModel(model);

    //隐藏行头和列头
    ui->tableView->verticalHeader()->hide();
    ui->tableView->horizontalHeader()->hide();

    //隐藏标题栏
    ui->tableView->setWindowFlags(Qt::FramelessWindowHint);

    //去除表格线
    ui->tableView->setShowGrid(false);

    //设置表格的单元为只读属性,即不能编辑
    ui->tableView->setEditTriggers(QAbstractItemView::NoEditTriggers);


    //设置根据内容自动对齐
    ui->tableView->horizontalHeader()->setSectionResizeMode(QHeaderView::ResizeToContents);
    ui->tableView->verticalHeader()->setSectionResizeMode(QHeaderView::Fixed);
    ui->tableView->horizontalHeader()->setMinimumSectionSize(100);
    ui->tableView->verticalHeader()->setMinimumSectionSize(100);

    //设置不可选中表格
    ui->tableView->setSelectionMode(QAbstractItemView::NoSelection);
    ui->tableView->verticalHeader()->setDefaultSectionSize(180);        //设置默认行高


//    //往表格中添加数据
      model->setItem(m_row,m_col, new QStandardItem());        //必须要先往表格里面添加一个空的

}

将按钮模块添加进Qtabview部分

//将全部按钮添加进表
bool main_table::append_all_button()
{
    int col =0;
    int row =0;
    for(auto t:m_list_button)
    {
        //换行判断
        if(col == MAX_COL_NUM)
        {
            row++;
            col = 0;

            model->setItem(row, 0, new QStandardItem());    //表格新行添加一个新元素
        }
        ui->tableView->setIndexWidget(model->index(row,col++),t);   //将按钮添加进表

        //给所有按钮绑定上传下载事件
        connect(t,&button_object::si_click_updown,[=](int id){
            qDebug()<<"在main table 里面接受到了按钮"<<id<<"的上传";
            download_file(id);
        });

        connect(t,&button_object::si_click_delete,[=](int id){
            qDebug()<<"在main table 里面接受到了按钮"<<id<<"的下载";
            delete_button(id);
        });
    }

    //防止一行以及满6个了的情况,此时上传按钮需要换行显示
    if(col == MAX_COL_NUM)
    {
        row++;
        col = 0;
        model->setItem(row, 0, new QStandardItem());    //表格新行添加一个新元素
    }

    //添加上传按钮
    append_upload_buttton(row,col);

    //将下一个添加按钮的位置存储起来
    m_row = row;
    m_col = col+1;

    return true;


}

...

项目项目代码吧

写的比较菜,求指导。。。

项目源代码:

yunpan_demo: qt+mysql云盘小项目

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值