1.界面设计
设计的上位机界面如下图所示,包括显示接收数据的文本框和串口的配置区域,以及向采集系统发送开始采集数据和停止的Button按钮。
其中,端口和波特率使用的是Input Widgets中的Combo Box
使用时双击,点加号添加元素即可。调用如下函数获取选择的值:
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 <QtSerialPort>
然后,定义一个串口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 <QFile>
定义一个文件变量,并给定文件的路径(这里我是基于当前时间自己生成一个文件名和路径,方法有点笨但能用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时要修改构建路径,不然会出一些奇怪的问题。
2.ui里添加了块但是ui->不出来
一个原因可能是没保存ui文件,其他原因暂时不知道是怎么回事,我的解决办法是重新打开project或者在添加一个相同的块,这时可能能够ui->出之前那个,但是新添加的还是没有。希望大佬能解答下这个问题。
5.excle保存数据
excle有导入数据的功能,可以将规整的数据文件直接导入导表格中
我在数据发送端将数据处理为用逗号隔开的形式并按行发送,上位机接收到数据后便不需要处理直接写入文件中即可。
6.上位机程序
上位机程序下载链接: