串口助手(串口发送接收数据, 定时, 清空, hex显示)

串口助手(串口发送接收数据, 定时, 清空, hex显示)这篇文章继续介绍自制串口助手

大家好,欢迎来到IT知识分享网。

前言

这篇文章继续介绍 自制串口助手。串口助手(上)


一、串口接收数据

1. 默认接收,换行,hex显示

QSerialPort 会在串口有数据收到时发出 readyRead( ) 信号,可以在其槽函数里进行数据的接收。

// 连接信号与槽 connect(serial, SIGNAL(readyRead()), this, SLOT(receiveData())); 
void Widget::receiveData() { 
     QByteArray data = serial->readAll(); // readAll() 读取串口缓冲区的所有数据 bytesReceive += QString(data).size(); // size() 获取接收数据的字节大小 qDebug() << bytesReceive; // 检查读取是否成功 if (data.isEmpty()) { 
     qDebug() << "Failed to read the data from serial port"; return; } // 处理数据 if(ui->checkBox_7->isChecked()) // toHex() 转换为 hex { 
     QString hexString = data.toHex(' '); ui->plainTextEdit->insertPlainText(hexString); } else if(ui->checkBox_10->isChecked()) // appendPlainText()换行 { 
     ui->plainTextEdit->appendPlainText(QString(data)); } else if(ui->checkBox->isChecked()) // 接收时间 { 
     // currentDateTime ()获取当前时间 QDateTime currentTime = QDateTime::currentDateTime(); // 显示接收时间  QString strDateTime = currentTime.toString(QString("【") + "yyyy-MM-dd hh:mm:ss" + QString("】 ")); ui->plainTextEdit->insertPlainText(strDateTime); ui->plainTextEdit->insertPlainText(QString(data)); } else { 
     ui->plainTextEdit->insertPlainText(QString(data)); // 默认数据接收, } ui->label_13->setText("Received: " + QString::number(bytesReceive)); } 

注意
appendPlainText(const QString &text ) : 将带有文本的新段落附加到文本编辑的末尾。

insertPlainText ( const QString &text) : 在当前光标位置插入文本的便利插槽。

setPlainText(const QString &text): 将文本编辑的文本更改为字符串文本。将删除任何以前的文本

2. 清空接收区数据

使用 clear( ) 函数可以清空接受区的数据。

 ui->plainTextEdit->clear(); 

3. 保存接受区数据

  1. 使用 文件对话框类QFileDialog 中的静态函数 getSaveFileName 函数 ,返回用户选择要保存的文件路径 ( filename )。

在这里插入图片描述
在这里插入图片描述

  1. 创建一个 QFile 对象 ( file ),以写入模式( QIODevice::WriteOnly ) 打开文件。
  2. 使用 QTextStream 创建一个数据流 ( out ),将文件与数据流关联。
  3. 使用了 QPlainTextEdittoPlainText( ) 函数来获取 接受区 中的所有纯文本数据。
    使用数据流将 接受区中的文本写入到文件中。

详细代码:

/*得到要保存的的文件名*/ QString filename = QFileDialog::getSaveFileName(this, "另存为", "C:/", tr("Text Files(*.txt)")); /*判断文件名是否为空,文件是否保存成功*/ if(!filename.isEmpty()) { 
     QFile file(filename); if(file.open(QIODevice::WriteOnly)) { 
     QTextStream out(&file); //数据流 写数据进文件 out << ui->plainTextEdit->toPlainText(); file.close(); // 关闭文件 } } 

效果展示:
在这里插入图片描述

二、串口发送数据

1. 默认发送

使用 QSerialPort 类的 write( ) 函数进行发送。
write( ) 返回值 是 实际写入的字节数.

write(const char *data); 
void Widget::sendData() { 
     QString data = ui->lineEdit_9->text(); // 获取要发送的文本 // 由于data 是QString ,需要转换为 const char * QByteArray byteArray = data.toUtf8(); // 1.将QString -> QByteArray const char *data1 = byteArray.data(); // 2.获取 QByteArray 的数据指针 int Send = serial->write(data1); // 3.发送数据,返回写发送的字节数 bytesSend += Send; // 累计发送数据的个数 ui->label_14->setText("Send: " + QString::number(bytesSend)); } 

按下 “ 发送” 按钮,发送数据:

void Widget::on_send_clicked() { 
     sendData(); } 

2. 定时发送

定时发送 需要依靠于定时器类 QTimer

// 创建定时器对象 QTimer timer2; timer2.setInterval(ui->ms_time->text().toInt()); // toInt将字符串转换为int类型。获取,设置时间间隔。 timer2.start(); // 启动定时器 // 连接信号与槽,到达时间间隔则进入 timerSend 槽函数 connect(&timer2,SIGNAL(timeout()),this,SLOT(timerSend())); 
void Widget::timerSend() // 定时发送数据 { 
     if(ui->checkBox_11->isChecked()) { 
     timer2.setInterval(ui->ms_time->text().toInt()); //更新右下角时间 sendData(); } } 

三、串口助手优化

1. 设置组合框当前内容。

当 组合框 中有多个选项卡时,可以使用 setCurrentIndex( ) 函数来选择当前显示的选项卡。
参数 index 要显示的选项卡的索引值,选项卡的索引值从 0 开始计数

void setCurrentIndex(int index); 

2. 未检测到串口,弹出警告。

使用 QMessageBox 类的 静态成员函数 warning 来弹出消息对话框。

在这里插入图片描述

QMessageBox::warning(QWidget *parent, const QString &title, const QString &text, QMessageBox::StandardButtons buttons = QMessageBox::Ok, QMessageBox::StandardButton defaultButton = QMessageBox::NoButton) 

其中:

  • parent:指定该对话框所属的父组件,通常传入 this 即可,代表当前组件。
  • title:警告对话框的标题。
  • text:警告对话框的内容(警告信息)。
  • buttons:指定对话框上出现的按钮。默认情况下只会显示 OK 按钮。可以选择其他的按钮,如 Yes、No、Cancel、Apply、Close 等。
  • defaultButton:指定哪个按钮应该被默认选中。默认情况下不会有默认选中的按钮。

3. 载入文件

// 1.打开文件对话框选择要打开的文件,并返回其路径 QString fileName = QFileDialog::getOpenFileName(this, "打开列表", "C:/Users/w/Desktop/test1", tr("Text Files(*.txt)")); // 2. 根据路径创建 QFile 对象 QFile file(fileName); QString one = ""; QString two = ""; // 3. 以可读可写的模式打开文件 if (file.open(QIODevice::ReadOnly | QIODevice::Text)) { 
     // 4.创建一个数据流 in,将文件与数据流关联 QTextStream in(&file); // 5. 数据流读出数据 in >> one; in >> two; // 6. 将文本显示在文本框中 ui->lineEdit->setText(one); ui->lineEdit_2->setText(two); // 关闭文件 file.close(); } 

总结

大家可以在此基础上 对自制的 串口助手 加以改进和开发。

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/113036.html

(0)
上一篇 2026-01-14 17:17
下一篇 2026-01-14 17:26

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信