简述
QT学了一点发现学不进去,索性看看能不能直接撸个程序,于是就有了这个简易的串口软件…
分析需求
这是XCOM串口收发软件,以此为例
目的很明确:
- 串口列表要能显示所有已经接上PC上的COM
- 以我们的配置115200-8-1-N打开串口
- 能收、发
新建一个Qt项目
既然用到串口,那么我们就要在.pro里增加串口的库
QT += serialport # 串口库
以及mainwindow.h里添加头文件
#include "qDebug.h" // 调试输出用
#include <QtSerialPort/QSerialPort> // 提供访问串口的功能
#include <QtSerialPort/QSerialPortInfo> // 提供系统中存在的串口的信息
先拖控件把ui整出来
要注意的是,除了Label,其他的控件都记得命名呀,当然你用默认的也行…
打开串口功能
1. 选择串口功能
我们要打开的串口,并不希望他是临时变量,我们用到的地方多呢!所以就在头文件先定义一个私有成员变量
QSerialPort *serial;
我们希望他在打开的时候就能加载所有的COM,所以我们在MainWindow里做这一步,创建窗口的时候就初始化COM列表,顺带着我们为serial开辟空间
// 我们在 ui->setupUi(this); 后面加入这些代码即可
// 添加所有串口到comboBox里(串口号的名字叫comboBox_COMx)
foreach(const QSerialPortInfo &info, QSerialPortInfo::availablePorts())
{
ui->comboBox_COMx->addItem(info.portName()); //+':'+info.description()
}
serial = new QSerialPort(this);
我们用info去引用一个个的从串口的列表里取出COM的信息,如果有,我们就把他加入到【串口选择】的下拉栏里
这个时候如果我们运行,就会发现【串口选择】里已有了PC上已插入的COM设备。
2. 打开串口
首先为按钮【打开串口】添加槽,然后在槽函数里编写我们的代码:
打开了 总不能就一直开吧,所以我们做了一个开关,通过按钮上的字来判断是开还是关
// 点击打开串口
if(ui->pushButton_OpenSerial->text()==tr("打开串口"))
{
ui->pushButton_OpenSerial->setText(tr("关闭串口"));
}
else
{
ui->pushButton_OpenSerial->setText(tr("打开串口"));
}
这个时候我们运行,会发现打开串口的按钮已经可以正常工作了,点击打开,会显示关闭按钮。点击关闭,会显示打开按钮。
按钮做完了,接着就要做功能了,如果要关闭,我们就可以调用serial->close();来关闭串口,如果要打开,我们就去打开,不过不知道能不能打开(可能别的程序正在使用),所以加个if判断一下。
// 点击打开串口
if(ui->pushButton_OpenSerial->text()==tr("打开串口"))
{
ui->pushButton_OpenSerial->setText(tr("关闭串口"));
// 设置串口号(以当前显示的COM号为要打开的串口)
serial->setPortName