Qt串口通信开发之QSerialPort模块简单使用方法与实例!
我这里主要是对串口类的简单使用,实现的功能是以读写方式打开串口,点击发送数据按钮将发送区的数据发送到缓冲区,然后在接收区显示出来,界面如下:(源码可以在这里下载)
这里使用了QSerialPort模块提供的两个类:QSerialPort类和QSerialPortInfo类,QSerialPort类提供了对串口的操作,QSerialPortInfo类提供了对串口信息的获取。下面是主要代码,包含了对串口类的简单使用。
首先,一定要在.pro文件中添加:QT+=serialport
串口初始化如下:
/****************************串口初始化*****************************/
voidMainWindow::initPort()
{
//读取串口信息
foreach(constQSerialPortInfo&info,QSerialPortInfo::availablePorts())
{
qDebug()<<"Name:"<cmbPortName->addItem(info.portName());
//关闭串口等待人为(打开串口按钮)打开
serial.close();
}
}
QStringListbaudList;//波特率
QStringListparityList;//校验位
QStringListdataBitsList;//数据位
QStringListstopBitsList;//停止位
baudList<<"50"<<"75"<<"100"<<"134"<<"150"<<"200"<<"300"
<<"600"<<"1200"<<"1800"<<"2400"<<"4800"<<"9600"
<<"14400"<<"19200"<<"38400"<<"56000"<<"57600"
<<"76800"<<"115200"<<"128000"<<"256000";
ui->cmbBaudRate->addItems(baudList);
ui->cmbBaudRate->setCurrentIndex(12);
parityList<<"无"<<"奇"<<"偶";
parityList<<"标志";
parityList<<"空格";
ui->cmbParity->addItems(parityList);
ui->cmbParity->setCurrentIndex(0);
dataBitsList<<"5"<<"6"<<"7"<<"8";
ui->cmbDataBits->addItems(dataBitsList);
ui->cmbDataBits->setCurrentIndex(3);
stopBitsList<<"1";
stopBitsList<<"1.5";
stopBitsList<<"2";
ui->cmbStopBits->addItems(stopBitsList);
ui->cmbStopBits->setCurrentIndex(0);
//设置按钮可以被按下
ui->btnOpen->setCheckable(true);
}
这里通过遍历所有串口将我们需要使用的串口添加到了combox中,如果想要手动选择可以将串口名称通过列表的方式添加到combox中,到使用的时候再选择。
串口设置如下:
/****************************串口设置******************************/
voidMainWindow::on_btnOpen_clicked()
{
if(ui->btnOpen->text()=="打开串口")
{
my_serialport=newQSerialPort(this);
//设置串口号
my_serialport->setPortName(ui->cmbPortName->currentText());
//以读写方式打开串口
if(my_serialport->open(QIODevice::ReadWrite))
{
//设置波特率
my_serialport->setBaudRate(ui->cmbBaudRate->currentText().toInt());
//设置数据位
my_serialport->setDataBits(QSerialPort::Data8);
//设置校验位
my_serialport->setParity(QSerialPort::NoParity);
//设置流控制
my_serialport->setFlowControl(QSerialPort::NoFlowControl);
//设置停止位
my_serialport->setStopBits(QSerialPort::OneStop);
//每秒读一次
timer=newQTimer(this);
connect(timer,SIGNAL(timeout()),this,SLOT(readComDataSlot()));
timer->start(1000);
setNonSelectable();
}
else
{
QMessageBox::about(NULL,"提示","串口没有打开!");
return;
}
}
else
{
timer->stop();
setSelectable();
my_serialport->close();
}
}
这里是对串口的设置,需要先打开串口才能设置串口参数。参数设置好之后就可以通过read()和write()函数进行数据的读写,我这里用的是1秒的定时器来读缓冲区的数据。
数据收发如下:
/****************************数据传输******************************/
voidMainWindow::readComDataSlot()
{
//读取串口数据
QByteArrayreadComData=my_serialport->readAll();
//将读到的数据显示到数据接收区的te中
if(readComData!=NULL)
{
ui->teReceiveData->append(readComData);
}
//清除缓冲区
readComData.clear();
}
voidMainWindow::on_btnSend_clicked()
{
//获取发送区的数据
QStringsendData=ui->teSendData->toPlainText();
QByteArraysendData_2=sendData.toLatin1();
//写入缓冲区
my_serialport->write(sendData_2);
}
本文简单介绍了下Qt串口通信模块QSerialPort简单使用方法与实例,更详细的Qt串口通信模块QSerialPort知识请查看下面的相关链接
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。