#include "mainwindow.h" #include "ui_mainwindow.h" #include <QtSql> #include <iostream> #include <QDebug> #include <QChartView> #include <QtCharts> #include <QTime> using namespace std; MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) , ui(new Ui::MainWindow) { ui->setupUi(this); db=QSqlDatabase::addDatabase("QMYSQL"); //读数据库相关参数 db.setHostName("127.0.0.1"); db.setPort(3306); db.setDatabaseName("wendu"); db.setUserName("root"); db.setPassword("W****6"); bool ok=db.open(); if(ok) { cout<<"ok!"<<endl; QStringList tables=db.tables(); //数据库中有多少张表 foreach(QString table,tables) { string s = table.toStdString(); cout<<s<<endl; } createChart(); //insertDB(); } else { cout<<"err"<<endl; } } void MainWindow::createChart() { QChartView *chartView=new QChartView(this); QChart *chart=new QChart(); chart->setTitle("历史温湿度"); chartView->setChart(chart); this->setCentralWidget(chartView); QLineSeries *series0=new QLineSeries(); //定义两根折线 QLineSeries *series1=new QLineSeries(); series0->setName("温度"); series1->setName("湿度"); chart->addSeries(series0); //两根折线加入chart对象 chart->addSeries(series1); QSqlQuery query(db); //用sql语言查询数据库 QString sql="select * from wendubiao"; query.exec(sql); bool timeNo=true; QDateTime timeFirst,timeEnd; while(query.next()) { QDateTime time=query.value(0).toDateTime(); qreal wd=query.value(2).toDouble(); qreal sd=query.value(3).toDouble(); if (timeNo) { timeFirst=time; timeNo=false; } timeEnd=time; series0->append(time.toMSecsSinceEpoch(),wd); series1->append(time.toMSecsSinceEpoch(),sd); } QDateTimeAxis *axisX_Time = new QDateTimeAxis(); //x轴 axisX_Time->setRange(timeFirst,timeEnd); //设置x坐标开始和结束时间 axisX_Time->setTickCount(20); //设置坐标网格数 axisX_Time->setFormat("yyyyMMdd"); chart->addAxis(axisX_Time,Qt::AlignBottom); QValueAxis *axisY=new QValueAxis; //左边y轴 axisY->setRange(0,40); axisY->setTickCount(11); chart->addAxis(axisY, Qt::AlignLeft); QValueAxis *axisY1=new QValueAxis; //右边y轴 axisY1->setRange(0,100); axisY1->setTickCount(11); chart->addAxis(axisY1, Qt::AlignRight); series0->attachAxis(axisX_Time); //折线与坐标轴捆绑 series0->attachAxis(axisY); series1->attachAxis(axisX_Time); series1->attachAxis(axisY1); } void MainWindow::insertDB() { for(int i=0;i<1000;i++) { QSqlQuery queryInsert(db); queryInsert.prepare("INSERT INTO wendubiao VALUES (:shijian,:weizhi,:wendu,:shidu)"); QDateTime time=QDateTime::currentDateTime(); //当前时间 time=time.addDays(i); //当前时间加i天 queryInsert.bindValue(":shijian",time); queryInsert.bindValue(":weizhi","0"); QTime t; t=QTime::currentTime(); qsrand(t.msec()+t.second()*1000); //随机数 double wenNum=qrand()%40; double shiNum=(qrand()%50)+50; queryInsert.bindValue(":wendu",wenNum); queryInsert.bindValue(":shidu",shiNum); if(!queryInsert.exec()) { cout<<"err insert"<<endl; } else { cout<<"insert succ"<<endl; } } } MainWindow::~MainWindow() { delete ui; }