(1)在widget.h中加入必要文件,并且定义一个类指针


(2)如果有类的成员不知道怎么写,可以通过以下途径搜索

(2)设置串口数据
- void Widget::on_open_pb_clicked() //当打开串口按下时
- {
- QSerialPort::BaudRate buadrate; // ::为作用域,定义波特率
- QSerialPort::DataBits databits; //定义数据位
- QSerialPort::StopBits stopbits; //定义停止位
- QSerialPort::Parity checkbits; //定义校验位
- /******************波特率赋值******************************/
- if(ui->baudrate_cb->currentText()=="115200")
- buadrate=QSerialPort::Baud115200;
- else if(ui->baudrate_cb->currentText()=="9600")
- buadrate=QSerialPort::Baud9600;
- else if(ui->baudrate_cb->currentText()=="4800")
- buadrate=QSerialPort::Baud4800;
- /******************数据位赋值*******************************/
- if(ui->data_cb->currentText()=="8")
- databits=QSerialPort::Data8;
- else if(ui->data_cb->currentText()=="7")
- databits=QSerialPort::Data7;
- else if(ui->data_cb->currentText()=="6")
- databits=QSerialPort::Data6;
- else if(ui->data_cb->currentText()=="5")
- databits=QSerialPort::Data5;
- /*******************停止位赋值******************************/
- if(ui->stop_cb->currentText()=="1")
- stopbits=QSerialPort::OneStop;
- else if(ui->stop_cb->currentText()=="1.5")
- stopbits=QSerialPort::OneAndHalfStop;
- else if(ui->stop_cb->currentText()=="2")
- stopbits=QSerialPort::TwoStop;
- /******************校验位赋值******************************/
- checkbits=QSerialPort::NoParity; //因为强制选择无校验位
- /******************设置串口*******************************/
- serialport->setPortName(ui->com_cb->currentText()); //设置串口名
- serialport->setBaudRate(buadrate); //设置波特率
- serialport->setDataBits(databits); //设置数据位
- serialport->setStopBits(stopbits); //设置停止位
- serialport->setParity(checkbits); //设置校验位
-
- if(serialport->open(QIODevice::ReadWrite)==true) //串口打开成功
- QMessageBox::information(this,"提示","串口打开成功");
- else
- QMessageBox::critical(this,"警告","串口打开失败");
- }
(3)将串口打开与串口关闭通过槽函数关联按钮(QMessageBox用于提示)
- void Widget::on_close_pb_clicked() //当关闭窗口按钮按下时
- {
- serialport->close();
- QMessageBox::information(this,"提示","串口已经关闭");
- }
(4)关联准备读函数(函数部分widget前应该有void)

- /*************************准备读函数*************************/
- void Widget::SerialPort_ReadyRead_Slot()
- {
- QString receive_buff; //定义一个数组,存放接收到的内容
- receive_buff=QString(serialport->readAll());
- ui->receive_line->appendPlainText(receive_buff); //将接收到的内容在接收区显示出来
- }
(5)发送函数关联
- void Widget::on_send_pb_clicked()
- {
- serialport->write(ui->send_line->text().toLocal8Bit().data()); //将发送区内容转换为8bit发送出去
- }
(6)清空函数关联
- void Widget::on_clear_pb_clicked() //当清空按钮按下时
- {
- ui->receive_line->clear();
- }
(7)运行效果 
widget.h
- #ifndef WIDGET_H
- #define WIDGET_H
-
- #include
- #include "QSerialPort" //加入文件
-
- QT_BEGIN_NAMESPACE
- namespace Ui {
- class Widget;
- }
- QT_END_NAMESPACE
-
- class Widget : public QWidget
- {
- Q_OBJECT
-
- public:
- Widget(QWidget *parent = nullptr);
- ~Widget();
- QSerialPort *serialport; //定义一个QserialPort类的指针
- private slots:
- void on_open_pb_clicked();
-
- void on_close_pb_clicked();
-
- void SerialPort_ReadyRead_Slot(); //准备读信号函数声明
- void on_send_pb_clicked();
-
- void on_clear_pb_clicked();
-
- private:
- Ui::Widget *ui;
- };
- #endif // WIDGET_H
widget.cpp
- #include "widget.h"
- #include "ui_widget.h"
- #include "QSerialPortInfo" //引入必要的serial文件
- #include "QMessageBox" //消息提示
- Widget::Widget(QWidget *parent)
- : QWidget(parent)
- , ui(new Ui::Widget)
- {
- ui->setupUi(this);
- QStringList serialNamePort; //定义一个数组
- serialport = new QSerialPort(this); //串口指针赋值给serialport
-
- connect(serialport,SIGNAL(readyRead()),this,SLOT(SerialPort_ReadyRead_Slot())); //关联准备读信号
-
- foreach (const QSerialPortInfo &info ,QSerialPortInfo::availablePorts()) { //自动搜索当前串口
- serialNamePort<
portName(); //将返回值加载入数组 - }
- ui->com_cb->addItems(serialNamePort); //将搜索的串口加入UI界面
- }
-
- Widget::~Widget()
- {
- delete ui;
- }
- /*************************准备读函数*************************/
- void Widget::SerialPort_ReadyRead_Slot()
- {
- QString receive_buff; //定义一个数组,存放接收到的内容
- receive_buff=QString(serialport->readAll()); //将接收到的数据转换为QString类型
- ui->receive_line->appendPlainText(receive_buff); //将接收到的内容在接收区显示出来
- }
-
- void Widget::on_open_pb_clicked() //当打开串口按下时
- {
- QSerialPort::BaudRate buadrate; // ::为作用域,定义波特率
- QSerialPort::DataBits databits; //定义数据位
- QSerialPort::StopBits stopbits; //定义停止位
- QSerialPort::Parity checkbits; //定义校验位
- /******************波特率赋值******************************/
- if(ui->baudrate_cb->currentText()=="115200")
- buadrate=QSerialPort::Baud115200;
- else if(ui->baudrate_cb->currentText()=="9600")
- buadrate=QSerialPort::Baud9600;
- else if(ui->baudrate_cb->currentText()=="4800")
- buadrate=QSerialPort::Baud4800;
- /******************数据位赋值*******************************/
- if(ui->data_cb->currentText()=="8")
- databits=QSerialPort::Data8;
- else if(ui->data_cb->currentText()=="7")
- databits=QSerialPort::Data7;
- else if(ui->data_cb->currentText()=="6")
- databits=QSerialPort::Data6;
- else if(ui->data_cb->currentText()=="5")
- databits=QSerialPort::Data5;
- /*******************停止位赋值******************************/
- if(ui->stop_cb->currentText()=="1")
- stopbits=QSerialPort::OneStop;
- else if(ui->stop_cb->currentText()=="1.5")
- stopbits=QSerialPort::OneAndHalfStop;
- else if(ui->stop_cb->currentText()=="2")
- stopbits=QSerialPort::TwoStop;
- /******************校验位赋值******************************/
- checkbits=QSerialPort::NoParity; //因为强制选择无校验位
- /******************设置串口*******************************/
- serialport->setPortName(ui->com_cb->currentText()); //设置串口名
- serialport->setBaudRate(buadrate); //设置波特率
- serialport->setDataBits(databits); //设置数据位
- serialport->setStopBits(stopbits); //设置停止位
- serialport->setParity(checkbits); //设置校验位
-
- if(serialport->open(QIODevice::ReadWrite)==true) //串口打开成功
- QMessageBox::information(this,"提示","串口打开成功");
- else
- QMessageBox::critical(this,"警告","串口打开失败");
- }
-
-
- void Widget::on_close_pb_clicked() //当关闭窗口按钮按下时
- {
- serialport->close();
- QMessageBox::information(this,"提示","串口已经关闭");
- }
-
-
- void Widget::on_send_pb_clicked() //当发送按钮按下时
- {
- serialport->write(ui->send_line->text().toLocal8Bit().data()); //将发送区内容转换为8bit发送出去
- }
-
-
- void Widget::on_clear_pb_clicked() //当清空按钮按下时
- {
- ui->receive_line->clear();
- }
-
pro文件(只加入了serialport,以及自动加入的图标文件)
- QT += core gui serialport
-
- greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
-
- CONFIG += c++17
-
- # You can make your code fail to compile if it uses deprecated APIs.
- # In order to do so, uncomment the following line.
- #DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0.0
-
- SOURCES += \
- main.cpp \
- widget.cpp
-
- HEADERS += \
- widget.h
-
- FORMS += \
- widget.ui
-
- # Default rules for deployment.
- qnx: target.path = /tmp/$${TARGET}/bin
- else: unix:!android: target.path = /opt/$${TARGET}/bin
- !isEmpty(target.path): INSTALLS += target
-
- RESOURCES += \
- tubiao.qrc