赞
踩
串口接收数据用到QSerialPort::readyRead,每当有新数据可从设备的当前读取通道读取时,该信号就会发出一次。只有当新数据可用时,才会再次发出。
connect(mySerialPort,&QSerialPort::readyRead,this,&Widget::dealreadyRead);
信号:readyRead;槽函数:void Widget::dealreadyRead()。其中,槽函数中即为我们对接收信号的处理解析代码,利用readAll进行读取操作。
widget.h
- public:
- explicit Widget(QWidget *parent = 0);
- ~Widget();
- void dealreadyRead();
- double recivedata;
- QDateTime current_date_time;
- QString current_date;
-
- private:
- Ui::Widget *ui;
- QByteArray temp;
widget.c
- void Widget::dealreadyRead()
- {
- if(true == mIsOpen)
- {
- current_date_time = QDateTime::currentDateTime(); //获取当前系统时间
- double t = (double)(QDateTime::currentMSecsSinceEpoch()) / 1000.0;//动态绘图用到
- current_date = current_date_time.toString("yyyy.MM.dd hh:mm:ss.zzz");//时间格式
- temp = mySerialPort->readAll(); //读取串口数据
- if(ui->sixteen->isChecked() == false) //sixteen 判断是否勾选十六进制的复选框
- {
- ui->textEdit->append(current_date.append(temp));
- }
- else //十六进制显示
- {
- QDataStream out(&temp,QIODevice::ReadWrite);
- while(!out.atEnd())
- {
- qint8 outChar = 0;
- out>>outChar;
- QString str = QString("%1").arg(outChar&0xFF,2,16,QLatin1Char('0'));//十六进制
- ui->textEdit->insertPlainText(str.toUpper());
- ui->textEdit->insertPlainText(" ");
- ui->textEdit->moveCursor(QTextCursor::End);
- }
- }
- QString data = QString(temp);
- QString strs;
- for(int j = 0; j < data.length(); j++)
- {
- if(data[j] >= '0' && data[j] <= '9')
- strs.append(data[j]);
- }
- recivedata = strs.toDouble();
- //draw(t,recivedata); //绘制曲线函数
- }
- }
接收数据保存至指定路径下的代码设置void Widget::on_save_data_clicked()
widget.h
- private slots:
- void on_save_data_clicked(); //按键转到槽
widget.c
- void Widget::on_save_data_clicked()
- {
- QString textFile = QFileDialog::getSaveFileName(this,tr("Save txt"),".数据.txt",tr("text (*.txt)")); //选择路径
- QFile file(textFile);//文件命名
- if(!file.open(QFile::WriteOnly | QFile::Text)) //检测文件是否打开
- {
- QMessageBox::information(this, "Error Message", "Please Select a Text File!");
- return;
- }
- QTextStream out(&file); //分行写入文件
- out << ui->textEdit->toPlainText();
- }
本节主要针对串口接收数据处理和数据保存的代码分析,下图是工程界面的布局图以及每个控件对应的对象名称,仅供参考学习。感谢分享和关注,可以留言一起交流。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。