QT串口数据接收上位机

QT串口数据接收上位机

  • 1.界面设计
  • 2.串口配置
  • 3.文件读写
  • 4.使用QT遇到的一些问题
  • 5.excle保存数据
  • 6.上位机程序

1.界面设计

设计的上位机界面如下图所示,包括显示接收数据的文本框和串口的配置区域,以及向采集系统发送开始采集数据和停止的Button按钮。
QT串口数据接收上位机_第1张图片
其中,端口和波特率使用的是Input Widgets中的Combo Box
QT串口数据接收上位机_第2张图片
使用时双击,点加号添加元素即可。调用如下函数获取选择的值:

ui->comboBox_2->currentIndex()

文本输入框Line Edit获取输入的函数如下:

ui->lineEdit->text()

如果输入的是数字,可以转换为int方便处理

ui->lineEdit->text().toUInt()

文本显示框textBrowser的显示调用如下函数,buff为Qstring类型

ui->textBrowser->setText(buff);

2.串口配置

首先,在.pro文件中加入串口模块,并在头文件中包含串口头文件

QT       += serialport
#include 

然后,定义一个串口global_port,配置串口的端口号、波特率等参数。还需要将串口接收信号与槽函数进行绑定,在槽函数中对接收到的数据进行处理。最后打开串口:

QSerialPort global_port;    //串口
global_port.setPortName("COM1");
global_port.setBaudRate(QSerialPort::Baud9600);
global_port.setParity(QSerialPort::NoParity);
global_port.setDataBits(QSerialPort::Data8);
global_port.setStopBits(QSerialPort::OneStop);

connect(&global_port ,SIGNAL(readyRead()) , this ,SLOT(on_readyRead()));

global_port.open(QSerialPort::ReadWrite);

串口的读写函数如下,读取时要定义一个QByteArray类型的变量来存储串口接收到的数据。

QByteArray array = global_port.readAll();       //测试发现每次最多读512个

global_port.write(buff,3);

关闭串口的函数:

global_port.close();

3.文件读写

首先包含QT文件操作的头文件:

#include 

定义一个文件变量,并给定文件的路径(这里我是基于当前时间自己生成一个文件名和路径,方法有点笨但能用0_0):

/*利用当前时间命名文件名*/
QDateTime curDateTime=QDateTime::currentDateTime();
QString times = curDateTime.time().toString();
QString tem;
tem = times.left(5);
times = times.left(2)+tem.right(2)+times.right(2);  //文件名不能有: 将其去掉
f_name = "./DATE/" + times + ".txt";
QFile f(f_name);

然后就对文件流进行读写操作:

if(!f.open(QIODevice::WriteOnly | QIODevice::Append))
{
    qDebug() << "Open failed.";
    return -1;
}
QTextStream txtOutput(&f);
txtOutput << buff;

读取文件函数类似读取串口:

QByteArray t = file.readAll();

打开文件的方式:

模式 Value 描述
QIODevice::NotOpen 0x0000 不打开
QIODevice::ReadOnly 0x0001 只读方式
QIODevice::WriteOnly 0x0002 只写方式,如果文件不存在则会自动创建文件
QIODevice::ReadWrite 0x0003 读写方式
QIODevice::Append 0x0004 此模式表明所有数据写入到文件尾
QIODevice::Truncate 0x0008 打开文件之前,此文件被截断,原来文件的所有数据会丢失
QIODevice::Text 0x0010 读的时候,文件结束标志位会被转为’\n’;写的时候,文件结束标志位会被转为本地编码的结束为,例如win32的结束位’\r\n’
QIODevice::UnBuffered 0x0020 不缓存

4.使用QT遇到的一些问题

没有系统的学习过QT这个软件,只是需要用什么功能的时候就找找代码学习一下,所以遇到了些问题,记录一下。
1.构建路径
用别人的project时要修改构建路径,不然会出一些奇怪的问题。
QT串口数据接收上位机_第3张图片
2.ui里添加了块但是ui->不出来
一个原因可能是没保存ui文件,其他原因暂时不知道是怎么回事,我的解决办法是重新打开project或者在添加一个相同的块,这时可能能够ui->出之前那个,但是新添加的还是没有。希望大佬能解答下这个问题。

5.excle保存数据

excle有导入数据的功能,可以将规整的数据文件直接导入导表格中
QT串口数据接收上位机_第4张图片
我在数据发送端将数据处理为用逗号隔开的形式并按行发送,上位机接收到数据后便不需要处理直接写入文件中即可。
QT串口数据接收上位机_第5张图片

6.上位机程序

上位机程序下载链接:

QT_usart_file.rar

你可能感兴趣的:(QT开发,qt5,串口通信,c++,c语言,单片机)