Qt串口通信开发之QSerialPort模块简单使用方法与实例

我这里主要是对串口类的简单使用,实现的功能是以读写方式打开串口,点击发送数据按钮将发送区的数据发送到缓冲区,然后在接收区显示出来,界面如下:(源码可以在这里下载)

这里使用了QSerialPort模块提供的两个类:QSerialPort类和QSerialPortInfo类,QSerialPort类提供了对串口的操作,QSerialPortInfo类提供了对串口信息的获取。下面是主要代码,包含了对串口类的简单使用。

首先,一定要在.pro文件中添加:QT += serialport

串口初始化如下:

/****************************串口初始化*****************************/

void MainWindow::initPort()

{

//读取串口信息

foreach (const QSerialPortInfo &info, QSerialPortInfo::availablePorts())

{

qDebug()<<"Name:"<<info.portName();

qDebug()<<"Description:"<<info.description();

qDebug()<<"Manufacturer:"<<info.manufacturer();

//这里相当于自动识别串口号之后添加到了cmb,如果要手动选择可以用下面列表的方式添加进去

QSerialPort serial;

serial.setPort(info);

if(serial.open(QIODevice::ReadWrite))

{

//将串口号添加到cmb

ui->cmbPortName->addItem(info.portName());

//关闭串口等待人为(打开串口按钮)打开

serial.close();

}

}

QStringList baudList;//波特率

QStringList parityList;//校验位

QStringList dataBitsList;//数据位

QStringList stopBitsList;//停止位

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中,到使用的时候再选择。

串口设置如下:

/****************************串口设置******************************/

void MainWindow::on_btnOpen_clicked()

{

if(ui->btnOpen->text() == "打开串口")

{

my_serialport = new QSerialPort(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 = new QTimer(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秒的定时器来读缓冲区的数据。

数据收发如下:

/****************************数据传输******************************/

void MainWindow::readComDataSlot()

{

//读取串口数据

QByteArray readComData = my_serialport->readAll();

//将读到的数据显示到数据接收区的te中

if(readComData != NULL)

{

ui->teReceiveData->append(readComData);

}

//清除缓冲区

readComData.clear();

}

void MainWindow::on_btnSend_clicked()

{

//获取发送区的数据

QString sendData = ui->teSendData->toPlainText();

QByteArray sendData_2 = sendData.toLatin1();

//写入缓冲区

my_serialport->write(sendData_2);

}

本文简单介绍了下Qt串口通信模块QSerialPort简单使用方法与实例,更详细的Qt串口通信模块QSerialPort知识请查看下面的相关链接

以上是 Qt串口通信开发之QSerialPort模块简单使用方法与实例 的全部内容, 来源链接: utcz.com/p/244960.html

回到顶部