当前位置:   article > 正文

Qt系列——实时接收数据,动态绘图(二)_qt读本地文件生成动态图形

qt读本地文件生成动态图形
  • 串口配置
  • 串口接收数据
  • 引入第三方库QCustomPlot
  • 动态绘图

串口接收数据

串口接收数据用到QSerialPort::readyRead,每当有新数据可从设备的当前读取通道读取时,该信号就会发出一次。只有当新数据可用时,才会再次发出。

connect(mySerialPort,&QSerialPort::readyRead,this,&Widget::dealreadyRead);

信号:readyRead;槽函数:void Widget::dealreadyRead()。其中,槽函数中即为我们对接收信号的处理解析代码,利用readAll进行读取操作。

widget.h

  1. public:
  2. explicit Widget(QWidget *parent = 0);
  3. ~Widget();
  4. void dealreadyRead();
  5. double recivedata;
  6. QDateTime current_date_time;
  7. QString current_date;
  8. private:
  9. Ui::Widget *ui;
  10. QByteArray temp;

widget.c

  1. void Widget::dealreadyRead()
  2. {
  3. if(true == mIsOpen)
  4. {
  5. current_date_time = QDateTime::currentDateTime(); //获取当前系统时间
  6. double t = (double)(QDateTime::currentMSecsSinceEpoch()) / 1000.0;//动态绘图用到
  7. current_date = current_date_time.toString("yyyy.MM.dd hh:mm:ss.zzz");//时间格式
  8. temp = mySerialPort->readAll(); //读取串口数据
  9. if(ui->sixteen->isChecked() == false) //sixteen 判断是否勾选十六进制的复选框
  10. {
  11. ui->textEdit->append(current_date.append(temp));
  12. }
  13. else //十六进制显示
  14. {
  15. QDataStream out(&temp,QIODevice::ReadWrite);
  16. while(!out.atEnd())
  17. {
  18. qint8 outChar = 0;
  19. out>>outChar;
  20. QString str = QString("%1").arg(outChar&0xFF,2,16,QLatin1Char('0'));//十六进制
  21. ui->textEdit->insertPlainText(str.toUpper());
  22. ui->textEdit->insertPlainText(" ");
  23. ui->textEdit->moveCursor(QTextCursor::End);
  24. }
  25. }
  26. QString data = QString(temp);
  27. QString strs;
  28. for(int j = 0; j < data.length(); j++)
  29. {
  30. if(data[j] >= '0' && data[j] <= '9')
  31. strs.append(data[j]);
  32. }
  33. recivedata = strs.toDouble();
  34. //draw(t,recivedata); //绘制曲线函数
  35. }
  36. }

 接收数据保存至指定路径下的代码设置void Widget::on_save_data_clicked()

widget.h

  1. private slots:
  2. void on_save_data_clicked(); //按键转到槽

widget.c

  1. void Widget::on_save_data_clicked()
  2. {
  3. QString textFile = QFileDialog::getSaveFileName(this,tr("Save txt"),".数据.txt",tr("text (*.txt)")); //选择路径
  4. QFile file(textFile);//文件命名
  5. if(!file.open(QFile::WriteOnly | QFile::Text)) //检测文件是否打开
  6. {
  7. QMessageBox::information(this, "Error Message", "Please Select a Text File!");
  8. return;
  9. }
  10. QTextStream out(&file); //分行写入文件
  11. out << ui->textEdit->toPlainText();
  12. }

 本节主要针对串口接收数据处理和数据保存的代码分析,下图是工程界面的布局图以及每个控件对应的对象名称,仅供参考学习。感谢分享和关注,可以留言一起交流。

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/从前慢现在也慢/article/detail/545709
推荐阅读
相关标签
  

闽ICP备14008679号