提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
一、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对音视频流监控解析,视频播放器,关键字索引,树形交互列表,以及进度条等小工具,后面会一步一步写出来供大佬们指教。