网站开发的技术简介,创建电子商务网站的7个步骤,北京公司排名100,怎么进入网站后台管理系统文章目录 前言一、串口接收数据1. 默认接收#xff0c;换行#xff0c;hex显示2. 清空接收区数据3. 保存接受区数据 二、串口发送数据1. 默认发送2. 定时发送 三、串口助手优化1. 设置组合框当前内容。2. 未检测到串口#xff0c;弹出警告。3. 载入文件 总结 前言
这篇文章… 文章目录 前言一、串口接收数据1. 默认接收换行hex显示2. 清空接收区数据3. 保存接受区数据 二、串口发送数据1. 默认发送2. 定时发送 三、串口助手优化1. 设置组合框当前内容。2. 未检测到串口弹出警告。3. 载入文件 总结 前言
这篇文章继续介绍 自制串口助手。串口助手上 一、串口接收数据
1. 默认接收换行hex显示
串口接收数据时可以选择 “接收时间”, HEX显示, “自动换行”。 在 Qt 中通过 QSerialPort 的 read( ) 函数可以实现串口的读取数据。
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. 保存接受区数据
使用 文件对话框类QFileDialog 中的静态函数 getSaveFileName 函数 返回用户选择要保存的文件路径 ( filename )。 创建一个 QFile 对象 ( file )以写入模式( QIODevice::WriteOnly ) 打开文件。 使用 QTextStream 创建一个数据流 ( out )将文件与数据流关联。 使用了 QPlainTextEdit 的 toPlainText( ) 函数来获取 接受区 中的所有纯文本数据。 使用数据流将 接受区中的文本写入到文件中。
详细代码
/*得到要保存的的文件名*/
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 - QByteArrayconst 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();
}总结
大家可以在此基础上 对自制的 串口助手 加以改进和开发。