| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144 |
- #include "mainwindow.h"
- #include "ui_mainwindow.h"
- #include <QDebug>
- #include <QMessageBox>
- #define WINDOW_SIZE 200
- MainWindow::MainWindow(QWidget *parent)
- : QMainWindow(parent)
- , ui(new Ui::MainWindow)
- {
- ui->setupUi(this);
- initThread();
- initSiganl();
- initCombox();
- initPlot();
- }
- void MainWindow::initThread()
- {
- serialthread = new SerialThread();
- portTh = new QThread(this);
- serialthread->moveToThread(portTh);
- portTh->start();
- }
- void MainWindow::initSiganl()
- {
- connect(serialthread,&SerialThread::sigMessage,
- this,[=](QString msg)
- {
- QMessageBox::information(this,"错误",msg);
- });
- connect(this,&MainWindow::sigOpenSerial,serialthread,&SerialThread::openSerial,Qt::QueuedConnection);
- connect(serialthread,&SerialThread::sigTemperature,this,&MainWindow::updatePlot);
- }
- MainWindow::~MainWindow()
- {
- portTh->quit();
- portTh->wait();
- delete ui;
- }
- void MainWindow::initCombox()
- {
- QList<QSerialPortInfo> ports = QSerialPortInfo::availablePorts();
- if(ports.isEmpty())
- return;
- ui->comboBox_port->clear();
- for(const auto &info : ports)
- {
- ui->comboBox_port->addItem(info.portName());
- }
- }
- void MainWindow::initPlot()
- {
- for(int i = 1; i <= 32; i++)
- {
- m_names << QString::number(i);
- }
- QList<QColor> colors =
- {
- QColor("#E6194B"),QColor("#3CB44B"),QColor("#4363D8"),QColor("#F58231"),
- QColor("#911EB4"),QColor("#46F0F0"),QColor("#F032E6"),QColor("#BCF60C"),
- QColor("#FABEBE"),QColor("#008080"),QColor("#E6BEFF"),QColor("#9A6324"),
- QColor("#FFFAC8"),QColor("#800000"),QColor("#AAFFC3"),QColor("#808000"),
- QColor("#FFD8B1"),QColor("#000075"),QColor("#808080"),QColor("#A9A9A9"),
- QColor("#FF4500"),QColor("#2E8B57"),QColor("#1E90FF"),QColor("#DA70D6"),
- QColor("#B8860B"),QColor("#20B2AA"),QColor("#DC143C"),QColor("#7B68EE"),
- QColor("#228B22"),QColor("#FF1493"),QColor("#4682B4"),QColor("#CD853F")
- };
- for(int i = 0; i < m_names.size(); i++)
- {
- QCPGraph *graph = ui->customPlot->addGraph();
- graph->setName(m_names[i]); QPen pen(colors[i]);
- pen.setWidth(1);
- graph->setPen(pen);
- }
- ui->customPlot->xAxis->setLabel("Time");
- ui->customPlot->yAxis->setLabel("Temperature (°C)");
- ui->customPlot->xAxis->setRange(0, WINDOW_SIZE);
- ui->customPlot->yAxis->setRange(0.0, 100.0);
- ui->customPlot->yAxis->setNumberFormat("f");
- ui->customPlot->yAxis->setNumberPrecision(1);
- // 主刻度: 每5℃显示数字
- QSharedPointer<QCPAxisTickerFixed> yTicker(new QCPAxisTickerFixed);
- yTicker->setTickStep(5);
- ui->customPlot->yAxis->setTicker(yTicker);
- // 开启子刻度
- ui->customPlot->yAxis->setSubTicks(true);
- // X轴不要网格(不要竖线)
- ui->customPlot->xAxis->grid()->setVisible(false);
- // X轴不要子刻度
- ui->customPlot->xAxis->setSubTicks(false);
- // Y轴主网格
- ui->customPlot->yAxis->grid()->setVisible(true);
- // Y轴子网格
- ui->customPlot->yAxis->grid()->setSubGridVisible(true);
- // ================= 允许x轴拖动 缩放 =================
- ui->customPlot->setInteractions(QCP::iNone);
- ui->customPlot->replot();
- }
- void MainWindow::on_connect_btn_clicked()
- {
- QString portname = ui->comboBox_port->currentText();
- emit sigOpenSerial(portname);
- }
- void MainWindow::updatePlot(QVector<double> values)
- {
- for(int i = 0; i < 32; i++)
- {
- if(!std::isnan(values[i]))
- {
- ui->customPlot->graph(i)->addData(m_timeIndex,values[i]);
- }
- }
- for(int i=0;i<32;i++)
- {
- ui->customPlot->graph(i)->data()->removeBefore(m_timeIndex - WINDOW_SIZE);
- }
- if(m_timeIndex > WINDOW_SIZE)
- {
- ui->customPlot->xAxis->setRange(m_timeIndex - WINDOW_SIZE,m_timeIndex);
- }
- ui->customPlot->replot();
- m_timeIndex++;
- }
|