1. 预想效果
屏幕分为左右两边。左边分为两块,点击上面的将在右边显示实时数据;点击下面的将在右边显示出一个数据库的表,即历史数据。闭门造车过于难受,先咕了
两个程序。
开发板负责采集数据+展示实时数据+存入数据库。
虚拟机负责展示数据库数据。
数据库传输直接手动scp。
2. 实体数据
四个:
- 当前时间(QString)
- 环境光强度(QString)
- 接近距离(QString)
- 红外强度(QString)
3. 存储方式
数据库。
4. 开发思路
后端思路:
设置时间,每隔5秒获取一次当前的时间 + i2c实验的三个数据,并存入数据库。
前端思路:
左边为操作区,右边为显示区。一开始默认显示实时数据,点击左下方时查询数据库显示历史数据。
5. 代码板子
5.1 时间
/*获取当前时间*/
#include <QDateTime>
#include <QDebug>
QDateTime current_date_time =QDateTime::currentDateTime();
QString current_date =current_date_time.toString("yyyy.MM.dd hh:mm:ss");
qDebug() << current_date;
5.2 每隔 5 秒
/*.h要加上private slots 触发函数*/
private slots:
void timerTimeOut();
---------------------------------
//每隔5秒打印一行字
//最初始会停顿5秒
#include "mainwindow.h"
#include <QDateTime>
#include <QDebug>
#include <QTimer>
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
{
QTimer *timer;
timer = new QTimer(this);
timer->start(5000); //5s
connect(timer, SIGNAL(timeout()), this, SLOT(timerTimeOut()));
}
MainWindow::~MainWindow()
{
}
void MainWindow::timerTimeOut()
{
qDebug() << "过去了5秒";
}
5.3 获取 i2c 实验的三个数据
//als ps ir是三个数据
void MainWindow::getAp3216cData()
{
static QString als = ap3216c->alsData();
if (als != ap3216c->alsData()) {
als = ap3216c->alsData();
arcGraph[0]->setangleLength(als.toUInt() * 360 / 65535);
}
static QString ps = ap3216c->psData();
if (ps != ap3216c->psData()) {
ps = ap3216c->psData();
arcGraph[1]->setangleLength(ps.toUInt() * 360 / 1023);
}
static QString ir = ap3216c->irData();
if (ir != ap3216c->irData()) {
ir = ap3216c->irData();
arcGraph[2]->setangleLength(ir.toUInt() * 360 / 1023);
}
glowText[0]->setTextData(als);
glowText[1]->setTextData(ps);
glowText[2]->setTextData(ir);
}
5.4 存入数据库
教材里面的代码和前端杂在一起,要将对数据库的操作分离开来。
经测试,可以用这样的语法插入数据
model->setTable("data");
int row = model->rowCount();
model->insertRow(row);
model->setData(model->index(row,0), s1); //QString
model->setData(model->index(row,1), s2);
model->setData(model->index(row,2), s3);
model->setData(model->index(row,3), s4);
model->submit();
5.5 读取数据库
结合数据库2的教程,显示到表格中。
应该是这个
/* 创建数据映射,将前面的数据库内容映射到控件上 */
dataWidgetMapper->addMapping(lineEdit, 1);
dataWidgetMapper->addMapping(spinBox[0], 0);
dataWidgetMapper->addMapping(spinBox[1], 2);
dataWidgetMapper->addMapping(comboBox, 3);
6. 效果展示

忽略时间这个bug…
2265

被折叠的 条评论
为什么被折叠?



