QT之QtSerialPort类实现串口通信
QT提供了QtSerialPort类与QSerialPortInfo类,该类实现串口相关操作,和windows的serialport类相似,其中QtSerialPort实现串口的读写、初始化相关操作;QSerialPortInfo类提供相关串口信息。通过这两个类实现了一个简单的串口通信工具,其效果如下:
实现过程如下:
1、在*.pro工程里添加QtSerialPort,因为QtSerialPort不属于默认库。
QT += core gui
QT += serialport
2、创建界面相关操作按钮和显示。添加两个pushButton、两个TextEdit等控件
3、初始化串口,主要实现扫描有效的串口,把存在的串口,添加到Combox列表中去。
void MainWindow::serialportscan()
{
mserial = new QSerialPort();
if(mserial!=NULL)
{
qDebug()<<tr("扫描存在的串口");
foreach(const QSerialPortInfo &info, QSerialPortInfo::availablePorts())
{
QSerialPort ser;
ser.setPort(info);
/* 判断端口是否能打开 */
if(ser.open(QIODevice::ReadWrite))
{
ui->comboBox->addItem(ser.portName());
qDebug()<<tr("Port:")+ser.portName()+tr("\r\n");
ser.close();
}
}
}
}
4、打开串口,设置相关参数,包括串口端口、波特率、数据位、奇偶校验,注册接收槽等等,最好调用open实现串口操作。
//@打开串口
bool MainWindow::serialopen()
{
/* 设置串口名称 */
mserial->setPortName(ui->comboBox->currentText());
/* 设置波特率 */
mserial->setBaudRate(QSerialPort::Baud9600);
/* 设置数据位数 */
mserial->setDataBits(QSerialPort::Data8);
/* 设置奇偶校验 */
mserial->setParity(QSerialPort::NoParity);
/* 设置停止位*/
mserial->setStopBits(QSerialPort::OneStop);
/* 设置流控制 */
mserial->setFlowControl(QSerialPort::NoFlowControl);
mserial->setReadBufferSize(1024);
/* 打开串口 */
if(mserial->open(QIODevice::ReadWrite)==true)
{
QObject::connect(mserial, &QSerialPort::readyRead, this, SerialRecvMsgEvent);
return true;
}
else
{
return false;
}
}
5、接收数据,读取缓冲区里的所有数据,然后输出到界面上。
void MainWindow::SerialRecvMsgEvent()
{
if(mserial->bytesAvailable() >= 0)
{
// buf.remove(0,buf.length());
buf = mserial->readAll();
if(!buf.isEmpty())
{
/* 把接受到的数据显示到界面上 */
ui->RecvTextEdit->setText(buf);
}
}else
{
qDebug()<<"接受数据出错" + QString::number(mserial->bytesAvailable());
}
}
6、发送数据,添加按键槽,实现串口发送数据。
void MainWindow::on_pushButton_clicked()
{
if(mserial->isOpen())
{
QByteArray sendData = ui->SendTextEdit->toPlainText().toUtf8();
mserial->write(sendData);
}
}
7、源码地址
版权声明:本文为u011996698原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。