QT串口编程用到QSerialPort类与QSerialPortInfo类。
-QSerialPort:提供访问串口的功能 ,读写操作是通过该类来实现的。
-QSerialPortInfo:提供系统中存在的串口的信息,一般用于查询当前连接的串口信息。
QSerialPort类
使用方法
步骤1,在pro 文件中加
QT += serialport
步骤2,在头文件.h中加入
#include <QtSerialPort/QSerialPort>
如果有用到QSerialPortInfo类,同理加头文件 #include <QtSerialPort/QSerialPortInfo>
步骤3,定义一个对象并且实例化
QSerialPort *serial = new QSerialPort;
步骤4,对串口的名称、波特率、数据位、校验位、停止位等参数进行设置
例如:
serial->setPortName(name); //设置串口名
serial->open(QIODevice::ReadWrite); //打开串口
serial->setBaudRate(BaudRate); //设置波特率
serial->setDataBits(QSerialPort::Data8); //设置数据位数
serial->setParity(QSerialPort::NoParity); //设置奇偶校验
serial->setStopBits(QSerialPort::OneStop); //设置停止位
serial->setFlowControl(QSerialPort::NoFlowControl); //设置流控制
这里设置了串口名为name,打开串口并设置为可读可写,波特率为BaudRate,数据位为8位,没有奇偶校验位,停止位为1位,没有流控制。
步骤5,可以进行读写操作
读操作:当串口可读时,会发出readyRead()的信号,需要用到槽
connect(serial,SIGNAL(readyRead()),this,SLOT(Read_Data()));
void MainWindow::Read_Data()
{
QByteArray buf;
buf = serial->readAll();
}
写操作
serial->write(data);
可以通过返回值来确定成功写入/读出的字节数大小。
QSerialPortInfo类
用QSerialPortInfo类查找可用的串口的代码实现
foreach(const QSerialPortInfo &info, QSerialPortInfo::availablePorts())
{
QSerialPort serial;
serial.setPort(info);
if(serial.open(QIODevice::ReadWrite))
{
ui->PortBox->addItem(serial.portName()); //这里用一个QCombox装住
serial.close();
}
}