Qt实现对MySQL数据增删改查,并联动数据在QChart图上显示

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


一、Qt+Mysql版本是什么?

Qt版本为5.14.2,MySql数据库版本采用的为5.7.31。

二、使用步骤

1.Qt启动数据库

利用Qt连接MySql数据库,设置数据库基本信息,连接代码如下(示例):

    db.setHostName("localhost");
    db.setDatabaseName("Student_Manager_Qt");
    db.setUserName("root");
    db.setPassword("你的密码");
    if (!db.open())
    {
        QMessageBox::warning(this, "错误", "打开数据库失败,错误信息\n"
            + db.lastError().text(), QMessageBox::Ok, QMessageBox::NoButton);
        return;
    }
    else
    {
        txt_1->append("This Mysql Open Ok");
    }

2.读入数据

通过设置QTableView实现对表头,是否可选中,右键菜单功能,模型设置等。主要感觉用到的思想还是Qt的MVD模式,只不过代理隐式支持。以及对乱码的预处理。代码如下(示例):

   tabModelStudent->setHeaderData(tabModelStudent->fieldIndex("id"), Qt::Horizontal, QString::fromLocal8Bit("标号"));
    tabModelStudent->setHeaderData(tabModelStudent->fieldIndex("name"), Qt::Horizontal, QString::fromLocal8Bit("姓名"));
    tabModelStudent->setHeaderData(tabModelStudent->fieldIndex("class"), Qt::Horizontal,QString::fromLocal8Bit("资产"));
    tabModelStudent->setHeaderData(tabModelStudent->fieldIndex("password"), Qt::Horizontal, QString::fromLocal8Bit("种类"));

   theSelectionStudent = new QItemSelectionModel(tabModelStudent);
   tableViewStudent->setModel(tabModelStudent);
   tableViewStudent->setContextMenuPolicy(Qt::ContextMenuPolicy::CustomContextMenu);
   tableViewStudent->setSelectionModel(theSelectionStudent);
   //

---

3.对数据库进行操作

篇幅过于冗余,只展示插入和查询功能的槽函数。

void QLayout_Demo::SqlInsert()
{
    QString id = lin_3->text();
    QString name = lin_4->text();
    QString banji = lin_5->text();
    QString password = lin_6->text();
    //预处理的SQL语句;
   // QString sql = "INSERT INTO student VALUES(?,?,?,?)";
    //预处理
    query_model = new QSqlQueryModel();
    tableViewStudent->setModel(query_model);
    query_model->setQuery(QString("INSERT INTO student VALUES('%1','%2','%3','%4')").arg(id).arg(name).arg(banji).arg(password));
  /*  query.prepare(sql);
    query.addBindValue(id);
    query.addBindValue(name);
    query.addBindValue(banji);
    query.addBindValue(password);
    query.exec();
    if (query.exec())
    {
        QMessageBox::information(this, QString::fromLocal8Bit("通知"), QString::fromLocal8Bit("成功插入一条数据!"));
    }
    else
    {
        QString text = query.lastError().text();
        QMessageBox::warning(this, QString::fromLocal8Bit("提示"), text);
        qDebug() << text;
    }*/
}

void QLayout_Demo::SqlQuery()
{
    QString id = lin_3->text();
    query_model = new QSqlQueryModel();
    tableViewStudent->setModel(query_model);
    query_model->setQuery(QString("SELECT * FROM student WHERE id='%1'").arg(id));
}

 void QLayout_Demo::SqlDelete()
{
}

void QLayout_Demo::SqlUpdate()
{
}```

4.引接数据进行绘图

主要是讲引进的数据绑定到绘图所需展示的线和扇形片上 ,设置QChart后在QChartView上进行展示。

void QLayout_Demo::Paint_Chart()
{
    query.exec("SELECT id, class FROM student");
    while (query.next()) {
         series->append(query.value(0).toInt(), query.value(1).toInt());
    }
    xAxis->setRange(0, 200); // 设置 X 轴范围为 0 到 10
    xAxis->setTickCount(10);
    series->attachAxis(xAxis);
    // 创建 Y 轴并设置范围
    yAxis->setRange(0, 200); // 设置 Y 轴范围为 0 到 100
    // 将坐标轴添加到图表中
    yAxis->setTickCount(10);
    series->attachAxis(yAxis);
    chart_1 = new QChart(); 
    chart_1->addAxis(xAxis, Qt::AlignBottom);
    chart_1->addAxis(yAxis, Qt::AlignLeft);
    
    chart_1->addSeries(series);
    chart_1->createDefaultAxes();
    chart_1->setTitle("Your Chart Title");
    chartView_1->setChart(chart_1);
    chartView_1->show();
}

在这里插入图片描述
通过修改表中的数据实现对折线图表的动态绘制。主要的效果给大家展示出来。
做一个补充,对各种曲线图,饼状图,柱状图的添加:

	QBarSet* set0 = new QBarSet(QString::fromLocal8Bit("零食"));//
    series_1 = new QLineSeries();
    series_2 = new QPieSeries();
    series_3= new QSplineSeries(); 
    series_4 = new QBarSeries();
    while (query.next()) {
        set0->append(query.value(1).toDouble());//柱状图读取数据
   }
    /*while (query.next()) {
        series_1->append(query.value(0).toInt(), query.value(1).toInt());
    }*/
    /* while (query.next()) {
        series_2->append(query.value(0).toString(),query.value(1).toInt());
    }*/
    /*while (query.next()) {
        series_3->append(query.value(0).toInt(), query.value(1).toInt());
    }*/
  

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

总结

整个模块整体功能蛮多了的,包括FFmpeg+OpenCV对音视频流监控解析,视频播放器,关键字索引,树形交互列表,以及进度条等小工具,后面会一步一步写出来供大佬们指教。
在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值